Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
1:N关系中的SQL查询_Sql_Sql Server_Ms Access_Sql Server 2000 - Fatal编程技术网

1:N关系中的SQL查询

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

我有以下数据库,它是用户与其收据之间的简单关系:

我需要获得尽可能多的用户行和尽可能多的列。例如:

如果用户1有2张收据,我必须获得:

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