2016-12-14 180 views
0

我不知道它是否可行。如果可能的话,请帮我解决这个问题。从两个表中选择一个表

我有两个表,表1 表2

Table1          Table2 

CashReceivedFrom  Amount    CashPaidOutto  Amount   
x     100     A      300 
Y     200     B      400 
z     250 
xy     300 

有Table 1和Table之间没有关系。我想执行一个查询,使我看起来就像这样:

输出表

CashReceivedFrom  Amount    CashPaidOutto  Amount   
    x     100     A    300 
    Y     200     B    400 
    z     250 
    xy     300 

我想用它的日常现金reprt

+0

为什么?你想用这个做什么? – Igor

+0

只需要在UI上进行格式化,为什么你需要有'x'行与不相关的'y'行和你的数据库中的大量空数据? – Kritner

+0

我有一种情况,我想显示每日现金流量。 **收到的现金**和**支付的现金**我有这两张桌子第一张桌子我存入现金收入和第二张桌子现金支付。所以我想执行一个查询,以便我的输出看起来像这样: –

回答

0

这给你你想要的。

CREATE TABLE #TMP1 (ID INT,Amnt INT) 
CREATE TABLE #TMP2 (ID INT,Amnt INT) 

INSERT INTO #TMP1 VALUES 
(1,100) 
,(2,130) 
,(3,10) 
,(4,160) 

INSERT INTO #TMP2 VALUES 
(76,1024) 
,(78,134) 

;WITH cteA 
    AS 
    (
    SELECT * 
     ,ROW_NUMBER() OVER(ORDER BY ID) AS Pos 
    FROM #TMP1 
    ) 
,cteB 
    AS 
    (
    SELECT * 
     ,ROW_NUMBER() OVER(ORDER BY ID) AS Pos 
    FROM #TMP2 
    ) 
SELECT 
    A.ID 
    ,A.Amnt 
    ,B.ID 
    ,B.Amnt 
FROM 
    cteA A 
     LEFT JOIN cteB B 
      ON 
      A.Pos = B.Pos 
+0

thnx alotttt @pacreely它解决了我的问题.thnx很多。 :) –

+0

在我的解决方案中,我按ID排序。我建议您在解决方案中将其替换为聚簇索引中的关键字段。它会提高性能。 – pacreely

+0

再次感谢我将一直铭记在心! –

0

试试下面的语句。我不知道你为什么需要空数据。但下面的代码可能会帮助你。

SELECT * FROM (
    SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 1)) 
    AS SNO, CASHRECIEVEDFROM, AMOUNT FROM TABLE1 
) AS A 
    FULL OUTER JOIN 
    SELECT * FROM (
    SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 1)) 
    AS SNO, CASHPAIDTO, AMOUNT FROM TABLE2 
) AS B ON A.SNO = B.SNO