2011-08-18 91 views
-1

我有一个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的列?

+1

请注明您所面临的问题,并澄清你的问题。你明显的问题不符合你的标题或者不清楚。 – AJC

+0

现在你可以理解我的问题了吗? –

+0

我添加了SUM操作,假设在同一天可能有多个贷记或借记操作。 (我也假设你只使用DATE部分而不是TIME)。 – AJC

回答

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 
+0

感谢您的回复。这qry解决了我的问题。对不起,我的英语不好。 –

+0

当然,英语也不是我的母语......很高兴我能帮上忙。 – AJC

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 
+0

这是我的问题两个表都有日期列上面的例子table1交易是日期1和3 table2交易是日期2和3所以我如何正确显示日期。当我执行用户qry我得到正确的结果? –

3

如果我正确理解你的问题,THI是你想要什么:

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 
+0

对不起,它显示重复的记录 –

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]) 
+1

啊,你让我一分钟。 –

+0

对不起,以上qry返回重复记录 –

相关问题