我正在使用SQL Server 2008,并且需要制作一个列的公共列表。我知道如何去做,但我需要这段时间,而我使用分析功能,我的意思是我不想使用group by子句。 由于我也将选择在外部查询中的记录 “其中ROW_NUM = 1”SQL逗号分隔列表中的分析函数列表
下面是查询:
SELECT UserId
,ProductList
,Value
FROM
(
SELECT p.UserId
,p.Value
, ROW_NUMBER()OVER (PARTITION BY p.UserId ORDER BY p.RecordCreateDate asc) AS 'row_num'
--here I need a solution OVER (PARTITION BY p.UserId) AS 'ProductList'
FROM Products p
INNER JOIN
Users u
ON p.UserId = u.Id
) result
WHERE result.row_num = 1
用户数据:
Id Name ....
1 John
2 Anton
3 Craig
产品数据:
Id UserId Name RecordCreateDate Value
1 1 a 21.12.2012 10
2 1 b 11.12.2012 20
3 1 c 01.12.2012 30
4 2 e 05.12.2012 40
5 2 f 17.12.2012 50
6 3 d 21.12.2012 60
7 3 i 31.12.2012 70
我需要一个结果如:
UserId ProductList Value
1 a,b,c 30
2 e,f 40
3 d,i 60
感谢您的帮助
可能重复(HTTP:/ /stackoverflow.com/questions/6603319/concatenate-values-based-on-id) – 2012-02-07 17:46:01
你没有明白,我不想用group by clause – Mehmet 2012-02-07 17:52:32
你要求的结果对我来说没有意义。 row_number()如何生效?你如何期待有任何情况下row_number <> 1的任何用户ID?您能否显示样本数据和期望的结果(包括允许您的“where row_num = 1”要求有意义的结果?我没有“明白”,因为您没有足够的解释。我没有看到row_num在你的“我需要一个结果如:”部分,所以我不知道你在每一行row_num是什么,你也确定UserId和RecordCreatedDate来自产品表? – 2012-02-07 17:52:35