我正在使用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