1:N关系中的SQL查询
我有以下数据库,它是用户与其收据之间的简单关系: 我需要获得尽可能多的用户行和尽可能多的列。例如: 如果用户1有2张收据,我必须获得:1:N关系中的SQL查询,sql,sql-server,ms-access,sql-server-2000,Sql,Sql Server,Ms Access,Sql Server 2000,我有以下数据库,它是用户与其收据之间的简单关系: 我需要获得尽可能多的用户行和尽可能多的列。例如: 如果用户1有2张收据,我必须获得: IdUser Receipt 1 Receipt 2 1 12€ 13€ 我尝试在用户表和收据表之间建立一个内部连接,但我的用户行数和收据行数一样多 编辑 如果您知道收据的最大数量,则可以通过下面的透视查询获得结果: SELECT * FROM ( SELECT ROW_NUMBER() OVER(PARTI
IdUser Receipt 1 Receipt 2
1 12€ 13€
我尝试在用户表和收据表之间建立一个内部连接,但我的用户行数和收据行数一样多
编辑
如果您知道收据的最大数量,则可以通过下面的透视查询获得结果:
SELECT * FROM (
SELECT ROW_NUMBER() OVER(PARTITION BY receipt.IdUser ORDER BY receipt.IdUser ASC) AS RowId, user.IdUser, receipt.value
FROM user INNER JOIN receipt ON user.IdUser = receipt.IdUser
)
as s
PIVOT
(
max(value)
FOR RowId IN ([1], [2], <max number of the receipts> )
)AS pvt
但如果您不知道项目的最大数量,则最好使用dynamic pivot
您必须在查询中使用Dynamic PIVOT附加您尝试过的查询?我个人建议您在表示层中进行这种类型的转换,而不是使用Dynamic SQL。例如,通过在SSRS中使用矩阵,或在Excel中使用透视表。@venkatesh好的,我添加了我尝试过的查询。在一个查询中是否会返回多个用户?如果您必须使用T-SQL而不是表示层来执行此操作,那么可使用的示例数据将真正帮助您获得答案。感谢您的回答,但我有SQL server 2000和行数过多的部分,它没有实现,很抱歉,我没有指定版本。在另一个版本中,它可以正常工作
SELECT * FROM (
SELECT ROW_NUMBER() OVER(PARTITION BY receipt.IdUser ORDER BY receipt.IdUser ASC) AS RowId, user.IdUser, receipt.value
FROM user INNER JOIN receipt ON user.IdUser = receipt.IdUser
)
as s
PIVOT
(
max(value)
FOR RowId IN ([1], [2], <max number of the receipts> )
)AS pvt