3

質問があります。私はそれが以前に尋ねられたことを知っています。関連する質問を調べましたが、SQLスクリプトを機能させることができませんでした。

これが私の質問です:

SELECT T1.PART_ID, T2.ID, T2.DESCRIPTION
FROM #TEMP T1 
INNER JOIN #TEMP2 T2 ON T1.PART_ID = T2.PART_ID
ORDER BY T2.ID

テーブル:

PART_ID |  ID        |    DESCRIPTION
----------------------------------
10002   |  1182505   |   Tagfahrlichtschaltung
80029   | 1182505    |   Bluetooth
20004   | 1212866    |    Kindersitzbefestigung
10045   |  1212866   |    Lederlenkradrriegelung
11908   |  1257946   |    Airbag
22346   | 1257946    |    Automatic

次のような結果が必要です。

ID       | LISTOFPARTS
-----------------------------
1182505  |  "10002 : Tagfahrlichtschaltung ; 80029 : Bluetooth  "
1212866  |  "20004 : Kindersitzbefestigung ; 10045 : Lederlenkradrriegelung"
1257946  |  "11908 : AIRBAG ; 22346 : AUTOMATIC"

XML PATHを使用したものである必要があると思いますが、機能させることができませんでした。誰かがクエリを書き直して、文字列にグループ化および連結された結果を返すようにすることはできますか?

XMLPATHの有無にかかわらずソリューションが高く評価されます。

ありがとう!

4

2 に答える 2

2

http://sqlfiddle.com/#!3/d41d8/5441

create table #Temp (PART_ID bigint, ID bigint, DESCRIPTION nvarchar(max))

insert into #Temp
select 10002, 1182505, 'Tagfahrlichtschaltung' union all
select 80029, 1182505, 'Bluetooth' union all
select 20004, 1212866, 'Kindersitzbefestigung' union all
select 10045, 1212866, 'Lederlenkradrriegelung' union all
select 11908, 1257946, 'Airbag' union all
select 22346, 1257946, 'Automatic'

select 
    T1.ID,
    stuff(
        (
            select ' ; ' + cast(T2.PART_ID as nvarchar(max)) + ' : ' + T2.DESCRIPTION
            from #TEmp as T2
            where T2.ID = T1.ID 
            for xml path(''), type
        ).value('data(.)', 'nvarchar(max)')
    , 1, 3, '') as LISTOFPARTS
from #TEMP as T1 
group by T1.ID
order by T1.ID
于 2012-10-21T13:21:42.483 に答える
0

これは機能します-

DECLARE @TABLE TABLE (PART_ID INT,ID INT, DESCRIPTION VARCHAR(100))

INSERT INTO @TABLE 
VALUES
(10002   ,1182505   ,   'Tagfahrlichtschaltung')
,(80029   , 1182505    ,   'Bluetooth')
,(20004   , 1212866    ,    'Kindersitzbefestigung')
,(10045   ,  1212866   ,    'Lederlenkradrriegelung')
,(11908   ,  1257946   ,    'Airbag')
,(22346   , 1257946    ,    'Automatic')

;WITH SUBQUERY
AS
(
    SELECT ID,(CAST(PART_ID AS VARCHAR(12)) + ' : ' + DESCRIPTION) 'CONCATED'
    FROM @TABLE 
)

SELECT ID, LEFT(pre_trimmed.CONCATED , LEN(pre_trimmed.CONCATED )-1) AS LISTOFPARTS
FROM SUBQUERY AS extern
CROSS APPLY
(
    SELECT CONCATED + ','
    FROM SUBQUERY AS intern
    WHERE extern.ID = intern.ID
    FOR XML PATH('')
) pre_trimmed (CONCATED)
GROUP BY ID, pre_trimmed.CONCATED
于 2012-10-21T13:30:57.307 に答える