2017-06-21 44 views
0

目前我正在試圖推出了一些數據,在以後的日子遠銷1分的記錄,其中lookupId所爲每個記錄是相同的TSQL彙總不相互引用

application_id card_holder_name transaction_id LookUpID 
1060693   Bob    6247460   765858xxxxxx9999_2017 
964851   James    6259094   765858xxxxxx9999_2017 
937321   Fred    6262332   765858xxxxxx9999_2017 

在這種情況下,應該成爲一條記錄,但應該彙總application_id,card_holder_name,transaction_id的數據。每個元素將被回車分隔開,但仍然相互關聯。

E.G.下面

LookUpID    Application_ID  Card_Holder_Name Transaction_ID 
765858xxxxxx9999_2017 1060693 964851 937321 Bob James Fred 6247460 6259094 6262332 

代碼觀看時的根據APPLICATION_ID但在card_holder_name當添加和tranaction_id他們都不是屬於彼此的那些工作正常。我認爲這不會像複製原來的代碼那麼簡單。任何人都可以請幫忙,代碼如下所示。

create table #test (application_id int, card_holder_name varchar(50), transaction_id int, LookUpID nvarchar(50)) 
insert into #test (application_id, card_holder_name, transaction_id, LookUpID) 
select 1060693,   'Bob',    6247460,  '765858xxxxxx9999_2017' 
union all 
select 964851,   'James',    6259094,   '765858xxxxxx9999_2017' 
union all 
select 937321,   'Fred',    6262332,   '765858xxxxxx9999_2017' 

select LookUpID, 
    stuff((SELECT distinct CHAR(13)+CHAR(10) + cast(application_id as varchar(10)) 
     FROM #test t2 
     where t2.LookUpID = t1.LookUpID 
     FOR XML PATH(''), TYPE).value('.','nvarchar(max)'),1,2,'') as Application_ID, 
stuff((SELECT distinct CHAR(13)+CHAR(10) + cast(transaction_id as varchar(10)) 
     FROM #test t2 
     where t2.LookUpID = t1.LookUpID 
     FOR XML PATH(''), TYPE).value('.','nvarchar(max)'),1,2,'') as Transaction_ID, 
    stuff((SELECT distinct CHAR(13)+CHAR(10) + cast(card_holder_name as varchar(10)) 
     FROM #test t2 
     where t2.LookUpID = t1.LookUpID 
     FOR XML PATH(''), TYPE).value('.','nvarchar(max)'),1,2,'') as Card_Holder_Name 
    from #test t1 where LookUpID = '765858xxxxxx9999_2017' 
group by LookUpID 

我得到的結果是

LookUpID    Application_ID  Transaction_ID Card_Holder_Name  
765858xxxxxx9999_2017 1060693 937231 964851 6247460 6259094 6262332 Bob Fred James 

感謝

+2

沒有足夠的信息來幫助你。發佈您試圖包含card_holder_name和Transaction_ID的代碼,併發布結果。我不知道「他們不是屬於對方的」是什麼意思。 –

+0

已經添加如標籤 – PJD

+0

建議的進一步的信息代碼似乎工作正常。結果集究竟有什麼錯誤? – strickt01

回答

0

信仰的飛躍的位在這裏,但如果你的意思是你想連接值的順序是相同的每個列,你將需要在每種情況下添加一個明確的ORDER BY子句。但是,您需要刪除DISTINCT才能這樣做,因爲您不能將GROUP BY一列和ORDER BY另一列(按列順序排列的值可能存在於多個組中,因此無法保持順序)。所以你的查詢將需要:

create table #test (application_id int, card_holder_name varchar(50), transaction_id int, LookUpID nvarchar(50)) 
insert into #test (application_id, card_holder_name, transaction_id, LookUpID) 
select 1060693,   'Bob',    6247460,  '765858xxxxxx9999_2017' 
union all 
select 964851,   'James',    6259094,   '765858xxxxxx9999_2017' 
union all 
select 937321,   'Fred',    6262332,   '765858xxxxxx9999_2017' 
union all 
select 937320,   'Pete',    600,   '765858xxxxxx9998_2017' 
union all 
select 937322,   'Darren',    601,   '765858xxxxxx9998_2017' 

select LookUpID, 
stuff((SELECT CHAR(13)+CHAR(10) + cast(application_id as varchar(10)) 
    FROM #test t2 
    where t2.LookUpID = t1.LookUpID 
    order by application_id 
    FOR XML PATH(''), TYPE).value('.','nvarchar(max)'),1,2,'') as Application_ID, 
stuff((SELECT CHAR(13)+CHAR(10) + cast(transaction_id as varchar(10)) 
    FROM #test t2 
    where t2.LookUpID = t1.LookUpID 
    order by application_id 
    FOR XML PATH(''), TYPE).value('.','nvarchar(max)'),1,2,'') as Transaction_ID, 
stuff((SELECT CHAR(13)+CHAR(10) + cast(card_holder_name as varchar(10)) 
    FROM #test t2 
    where t2.LookUpID = t1.LookUpID 
    order by application_id 
    FOR XML PATH(''), TYPE).value('.','nvarchar(max)'),1,2,'') as Card_Holder_Name 
from #test t1 
group by LookUpID 
+0

嗨strickt01,這正是我想要的,我覺得它有點晚,我沒有很好地解釋自己。我確實嘗試了通過application_id來排列所有相關的列,但是我一直在做一些錯誤的事情,因爲它一直希望我把它包含在select中....我必須錯過一些東西,但非常高興的協助! :) – PJD

+0

你需要將它包含在'SELECT'中,因爲你有一個'DISTINCT' - 正如我的答案中所解釋的那樣。很高興幫助 - 這是一個新鮮的眼睛可以做的驚人的! – strickt01