使用名为相同的列查询两个表

时间:2011-08-18 19:14:33

标签: sql-server tsql

我在SQL Server数据库中有两个表:table1table2

表1:

 DATE        NAME    CREDIT
 1/1/2011    BALU      100 
 1/3/2011    BALU      200 

表2:

 DATE        NAME    DEBIT
 1/2/2011    BALU      100 
 1/3/2011    BALU       50 

我想以下列格式显示报告:

 DATE        NAME    CREDIT  DEBIT
 1/1/2011    BALU      100      0
 1/2/2011    BALU        0    100
 1/3/2011    BALU      200     50

我的问题是这两个表都有一个date列。

如果两个表都有一个名为SELECT的列,那么如何用WHERE子句写date语句?

5 个答案:

答案 0 :(得分:3)

如果我理解你的问题,那就是你想要的:

SELECT  ISNULL(T1.Date,T2.Date) Date, ISNULL(T1.Name,T2.Name) Name, 
        ISNULL(T1.Credit,0) Credit, ISNULL(T2.Debit,0) Debit
FROM table1 T1
FULL JOIN table2 T2
ON T1.Date = T2.Date AND T1.Name = T2.Name

答案 1 :(得分:3)

我仍然不满意你想要的东西,缺少一些细节。但根据在类似查询中工作的经验,我认为这是您可能需要的(或足够接近)。

SELECT ISNULL(C.DATE, D.DATE) DATE, ISNULL(C.NAME, D.NAME) NAME, SUM(C.CREDIT) CREDIT, SUM(D.DEBIT) DEBIT
FROM TABLE_1 C
FULL JOIN TABLE2 D ON D.DATE=C.DATE AND D.NAME=C.NAME
WHERE ISNULL(C.DATE, D.DATE) BETWEEN @DATE1 AND @DATE2
GROUP BY C.DATE, D.DATE, C.NAME, D.NAME

答案 2 :(得分:2)

SELECT COALESCE(t1.[DATE], t2.[DATE]) [DATE], 
    COALESCE(t1.[NAME], t2.[NAME]) [NAME], 
    COALESCE(t1.[CREDIT], 0) [CREDIT], 
    COALESCE(t2.[DEBIT], 0) [DEBIT]
  FROM Table1 t1
  FULL JOIN Table2 t2 
    ON (t1.[DATE] = t2.[DATE]) AND (t1.[NAME] = t2.[NAME])

答案 3 :(得分:0)

我猜您正在寻找sql中的datediff函数。 http://msdn.microsoft.com/fr-fr/library/ms189794.aspx 我可能还是错了,因为你的问题没有明确说明。

答案 4 :(得分:0)

由于你没有指定哪个日期在两者之间,而且FK链接两个表,我将假设..

 select ta.date, ta.name, ta.credit, tb.debit from table1 ta
 join table2 tb as (ta.name = tb.name)
 where ta.date between tb.date