SQL 在 1:N 关系中查询
SQL Query in an 1:N relationship
我有以下数据库,它是用户与其收据之间的简单关系:
我需要获得与用户一样多的行和与收据一样多的列。例如:
如果用户1有2张收据我必须获得:
IdUser Receipt 1 Receipt 2
1 12€ 13€
我尝试在 User 和 Receipt 表之间使用内部连接,但我的用户行数与他们的收据行数一样多。
编辑
SELECT user.idUser, receipt.value
FROM user INNER JOIN receipt ON user.IdUser = receipt.IdUser;
如果您知道收据的最大数量,您可以使用下面的数据透视查询获得结果:
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
但如果您不知道项目的最大数量,最好使用动态数据透视表
SQL Server - Dynamic PIVOT Table - SQL Injection
我有以下数据库,它是用户与其收据之间的简单关系:
我需要获得与用户一样多的行和与收据一样多的列。例如:
如果用户1有2张收据我必须获得:
IdUser Receipt 1 Receipt 2
1 12€ 13€
我尝试在 User 和 Receipt 表之间使用内部连接,但我的用户行数与他们的收据行数一样多。
编辑
SELECT user.idUser, receipt.value
FROM user INNER JOIN receipt ON user.IdUser = receipt.IdUser;
如果您知道收据的最大数量,您可以使用下面的数据透视查询获得结果:
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
但如果您不知道项目的最大数量,最好使用动态数据透视表
SQL Server - Dynamic PIVOT Table - SQL Injection