Answered sql 兩筆合成一筆

  • 2012年4月9日 上午 08:54
     
     

    5008    Y5    2531436    A0619    FHFD2    4    F    8888885    B    43.95    10    0     09571731    
    5008    Y5    2531436    A0619    FHFD2    4    F    8888885    S    44.2    5    0     09571731   

    以上兩筆  只有 買賣別 B  S  不同  怎麼 合成一筆

所有回覆

  • 2012年4月9日 上午 08:59
     
     已答覆

    您好,

    請參考以下的資訊,謝謝! 希望對您有幫助!

    [SQL]將多筆資料中某一列的資料作為一列顯示


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

  • 2012年4月9日 下午 12:01
     
     

    5008    Y5    2531436    A0619    FHFD2    4    F    8888885    B    43.95    10    0     09571731    
    5008    Y5    2531436    A0619    FHFD2    4    F    8888885    S    44.2    5    0     09571731   

    以上兩筆  只有 買賣別 B  S  不同  怎麼 合成一筆

    也是就能變成

    5008    Y5    2531436    A0619    FHFD2    4    F    8888885   B 43.95   S   44.2   09571731

    有底線的部份變成在同一列

  • 2012年4月9日 下午 02:54
     
     

    5008    Y5    2531436    A0619    FHFD2    4    F    8888885    B    43.95    10    0     09571731    
    5008    Y5    2531436    A0619    FHFD2    4    F    8888885    S    44.2    5    0     09571731   

    以上兩筆  只有 買賣別 B  S  不同  怎麼 合成一筆

    也是就能變成

    5008    Y5    2531436    A0619    FHFD2    4    F    8888885   B 43.95   S   44.2   09571731

    有底線的部份變成在同一列

    有辦法辦到嘛?!   我查了資料  好像沒這樣的case

  • 2012年4月9日 下午 04:24
    版主
     
     

    5008    Y5    2531436    A0619    FHFD2    4    F    8888885    B    43.95    10    0     09571731    
    5008    Y5    2531436    A0619    FHFD2    4    F    8888885    S    44.2    5    0     09571731   

    以上兩筆  只有 買賣別 B  S  不同  怎麼 合成一筆

    也是就能變成

    5008    Y5    2531436    A0619    FHFD2    4    F    8888885   B 43.95   S   44.2   09571731

    有底線的部份變成在同一列

    有辦法辦到嘛?!   我查了資料  好像沒這樣的case

    有嘗試過亂馬客提供的方法嗎? 文章兩種方法都可以達到你要的結果喔


    保證解答-微軟技術支援服務

  • 2012年4月10日 上午 12:00
     
     

    建立temp table將你要顯示的東西 依照你的需求insert 進去就OK嚕

  • 2012年4月10日 上午 01:55
     
      包含代碼
    SELECT 
    	ColA ,
    	STUFF -- 說明 3
    		(
    			(
    			SELECT ',' + ColB + SPACE(1) + CAST(ColC AS varchar(10)) -- 說明 2
    			FROM @Temp AS T2
    			WHERE T1.ColA = T2.ColA
    			FOR XML PATH('') -- 說明 1
    			)
    			,1,1,''
    		) AS Data
    FROM @Temp T1
    GROUP BY ColA
    

    說明

    1. 依預設,PATH 模式會針對結果集的每個資料列產生 <row> 元素包裝函數。 您可以選擇性地指定元素名稱。 如果您有選擇,則會將指定名稱做為包裝函數的元素名稱。 如果您提供空白字串 (FOR XML PATH ('')),就不會產生包裝函數元素。
    2. 不要給欄位名稱,任何沒有名稱的資料行都將予以內嵌。
    3. 利用 STUFF() 來取代第一個逗號

  • 2012年4月10日 上午 02:40
     
     

    有真的看了亂馬客大提供的方法嗎? 

    請注意一下T-SQL使用,

    像是做法1 ,你要達到希望的結果,

    第一個就是調整 SELECT @str  的部分,利用COALESCE串接 欲合併顯示欄位結果樣貌 

    例如  B ,  43.95 兩個欄位一個是代表A1 一個是A2,那就是COALESCE(@str + ', ', '') + A1+ ' ' + A2 FROM @T1;   

    然後在Select DISTINCT 的時候把會其他相同資訊的欄位列出來,再加上剛做出來的 @str就可以達到你要的結果了,

    做法2也是同樣道理。 

  • 2012年4月10日 上午 05:41
     
     

    或者是你也可以參考這篇文章來修改成符合你的需求。

    http://www.dotblogs.com.tw/terrychuang/archive/2011/04/16/22867.aspx


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/