我在SQL Server数据库中有两个表:table1
和table2
表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
语句?
答案 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