【发布时间】:2012-02-05 23:39:49
【问题描述】:
我正在修改视图,但我被卡住了。
我的用户有一个旧程序查询具有父(母亲和父亲)数据的数据库视图。母亲和父亲的名字共享一个记录(id、fname、lname、fname2、lname2 等...)。
我建立了一个新的数据库,表和对应的视图被更改为有 user_id、parent_id、fname 和 lname。
父母共享一个 user_id,但有各自的 parent_id。
无论如何,我正在尝试将 (user_id, fname, lname) 的结果恢复到看起来像 (id, fname, lname, fname2, lname2) 并且卡住了。我不知道从哪里开始,所以我得到了以下代码:
这是我开始的(不包括 parent_id):
user_id fname lname expiration
4 Jane Doe 2015-01-01 00:00:00.000
4 John Doe 2015-01-01 00:00:00.000
5 Bill Smith 2015-01-01 00:00:00.000
5 Mary Smith 2015-01-01 00:00:00.000
这是我正在尝试并被卡住的 sql:
SELECT ROW_NUMBER() OVER ( PARTITION BY parents.user_id ORDER BY parents.user_id ASC ) RowVersion ,
dbo.parents.user_id ,
fname ,
lname ,
'' AS fname2 ,
'' AS lname2 ,
ExpirationDate AS 'expiration'
FROM dbo.parents
INNER JOIN dbo.payment ON dbo.parents.user_id = dbo.payment.User_Id
UNION
SELECT ROW_NUMBER() OVER ( PARTITION BY parents.user_id ORDER BY parents.user_id ASC ) RowVersion ,
dbo.parents.user_id ,
'' AS fname ,
'' AS lname ,
fname AS fname2 ,
lname AS lname2 ,
ExpirationDate AS 'expiration'
FROM dbo.parents
INNER JOIN dbo.payment ON dbo.parents.user_id = dbo.payment.User_Id
GROUP BY parents.user_id ,
fname ,
lname ,
ExpirationDate
这是上面sql的结果;
RowVersion user_id fname lname fname2 lname2 expiration
1 4 John Doe 2015-01-01 00:00:00.000
1 4 Jane Doe 2015-01-01 00:00:00.000
2 4 Jane Doe 2015-01-01 00:00:00.000
2 4 John Doe 2015-01-01 00:00:00.000
1 5 Bill Smith 2015-01-01 00:00:00.000
1 5 Mary Smith 2015-01-01 00:00:00.000
2 5 Mary Smith 2015-01-01 00:00:00.000
2 5 Bill Smith 2015-01-01 00:00:00.000
这是我需要的:
user_id fname lname fname2 lname2 expiration
4 Jane Doe John Doe 2015-01-01 00:00:00.000
5 Bill Smith Mary Smith 2015-01-01 00:00:00.000
我觉得我很接近,但我也觉得我走错了路。有什么建议吗?
【问题讨论】:
-
对于每个
user_id,是否总是有两行具有相同的user_id?
标签: sql sql-server sql-server-2005 tsql view