2015-10-14 106 views
0

有幾個問題我已經發現,在這種情況下觸摸一點點,但沒有符合我所有需求的東西。不幸的是,我在SQL方面還不夠好,但卻把它們放在一起。SQL Server選擇併合並具有相同列的行之間的值

基本上我從表中選擇了幾行,我想只選擇具有不同值的行作爲一列,但要合併來自不同列的所有行的值,並在行中顯示總和顯示。

此外,我想從1列中選擇不同的值。

下面是一個例子:

ID #_of_Items Place Description 
======================= 
1  2  CA  towels 
2  4  NY  shirts 
3  1  MA  hats 
4  3  CA  shorts 
4  2  CA  pins 
4  4  NY  socks 

,我想選擇:

只需要兩列 - 基本上,這個地方是獨一無二的,但它需要的所有的總和來自隱藏行的#_of_items,並將它們添加到它顯示的每個狀態的一行。

然後,如果可能的話,我也想在說明欄中選擇所有不同項的組合,所以:

"towels, shirts, hats, shorts, pins, socks" 

我希望是有道理的。

非常感謝你提前給大家!

回答

0

如果你可以在數據庫中創建用戶定義函數(以您的表名是替換):

CREATE FUNCTION dbo.JoinItems(@place nvarchar(10)) 
    RETURNS NVARCHAR(MAX) 
AS 
BEGIN 
    DECLARE @list NVARCHAR(MAX) 
    SELECT @list = CASE WHEN @list IS NULL THEN N'' ELSE @list + N', ' END + description 
     FROM <table> 
    WHERE place = @place 
    RETURN @list 
END 
GO 

然後你就可以在你的查詢中使用返回的項目與項目列表計數一起具體到那個地方(再次,替換爲你的表名):

SELECT place, 
     [#_of_Items] = SUM([#_of_Items]), 
     Items = dbo.JoinItems(place) 
    FROM <table> 
GROUP BY place 
0

SQL 2005+:

SELECT ID, Place, Description 
     SUM(#_of_Items) OVER(PARTITION BY Place) AS #_of_Items 
FROM Your_Table 
+0

感謝您的回覆!我會和它上面的一個一起給它一個鏡頭。 – blubberbo