读书人

接上贴,多表查询中重复的有关问题

发布时间: 2013-07-04 11:45:32 作者: rapoo

接上贴,多表查询中重复的问题.


CREATE TABLE #a
(
RiQi date,
aTest NVARCHAR(20)
)
CREATE TABLE #b
(
RiQi Date,
BTest NVARCHAR(20)
)
INSERT INTO #a( RiQi, aTest)VALUES('2013-06-11','开支-吃饭')
INSERT INTO #a( RiQi, aTest)VALUES('2013-06-11','开支-洗脚')
INSERT INTO #b( RiQi, BTest)VALUES('2013-06-11','供应商-联想')

--想要的结果
#a.RiQi #a.aTest #b.RiQi #b. BTest
-------------------------------------------
2013-06-11 开支-吃饭 2013-06-11 供应商-联想
2013-06-11 开支-洗脚 NULL NULL

两表没有什么关系,就是需要查询相同天数的开支与供应商.不能有重复.如果B表数据多,A表数据记录少,那就用NULL表示
[解决办法]
这样?
USE tempdb
GO
CREATE TABLE #a
(
RiQi date,
aTest NVARCHAR(20)
)
CREATE TABLE #b
(
RiQi Date,
BTest NVARCHAR(20)
)
INSERT INTO #a( RiQi, aTest)VALUES('2013-06-11','开支-吃饭')
INSERT INTO #a( RiQi, aTest)VALUES('2013-06-11','开支-洗脚')
INSERT INTO #b( RiQi, BTest)VALUES('2013-06-11','供应商-联想')

SELECT
a.RiQi,a.aTest,b.RiQi,BTest
FROM
(SELECT *,Row=ROW_NUMBER()OVER(PARTITION BY RiQi ORDER BY RiQi) FROM #a) AS a
FULL JOIN
(SELECT *,Row=ROW_NUMBER()OVER(PARTITION BY RiQi ORDER BY RiQi) FROM #b) AS b ON a.RiQi=b.RiQi AND a.Row=b.Row

/*
RiQiaTestRiQiBTest
2013-06-11开支-吃饭2013-06-11供应商-联想
2013-06-11开支-洗脚NULLNULL
*/

读书人网 >SQL Server

热点推荐