Member 12245539 Ответов: 1

Как получить сумму и удерживать значение нескольких строк в одной строке SQL server


У меня есть одна sql-таблица. И эта таблица представляет собой значение типа
<br />
bank | branch  | chqno | chqdated    | Amount | childName | class | RecieiptNo<br />
ban1 | branch1 | 11111 | 12.12.2017  | 200    | child1    | 1-A   | 1  <br />
ban1 | branch1 | 11111 | 12.12.2017  | 300    | child2    | 1-B   | 2<br />
ban1 | branch1 | 11111 | 12.12.2017  | 300    | child3    | 1-C   | 3<br />
<br />
ban2 | branch2 | 22332 | 12.12.2017  | 400    | child3    | 2-B   | 4<br />

Теперь мой вопрос в том, как я могу показать свои данные, например
bank | branch  | chqno | chqdated    | Amount | child_class                            | RecieiptNo
ban1 | branch1 | 11111 | 12.12.2017  | 800    | child1 (1-A), child2 (1-B),child3 (1-C)| 1,2,3
ban2 | branch2 | 22332 | 12.12.2017  | 400    | child3 (2-B)                           | 4


Для этого я запустил запрос, и запрос ниже, пожалуйста, посмотрите на кого-нибудь.


Спасибо

Что я уже пробовал:

select distinct bank,bracnh, chqno,chqdated,Amount ,
STUFF((select ', '+ childName +' ('+ class +')' 
from dbo.temp t1 where t1.chqno=t2.chqno and t1.bank=t2.bank and  t1.bracnh=t2.bracnh and 
t1.chqdated=t2.chqdated and t1.Amount=t2.Amount for XML path ('')),1,1,'') as [child name] from dbo.temp t2 

1 Ответов

Рейтинг:
11

Bryian Tan

Я думаю, что на данный момент этот запрос должен работать.

SELECT  bank, branch, chqno, SUM(Amount) Amount
       ,STUFF((SELECT ', ' + CAST(ReceiptNo AS VARCHAR(10)) [text()]
         FROM dbo.code1 
         WHERE bank = t.bank
         FOR XML PATH(''), TYPE)
        .value('.','NVARCHAR(MAX)'),1,2,' ') ReceiptNo

		,STUFF((SELECT ', ' + childName + ' (' + Class + ')' [text()]
         FROM dbo.code1 
         WHERE bank = t.bank
         FOR XML PATH(''), TYPE)
        .value('.','NVARCHAR(MAX)'),1,2,' ') child_class
FROM dbo.code1 t
GROUP BY bank, branch, chqno


Выход:
bank	branch	chqno	Amount	ReceiptNo	child_class
ban1	branch1 11111	  800	1, 2, 3	     child1 (1-A), child2 (1-b), child3 (1-c)
ban2	branch2	22332	  400	 4	         child3 (2-B)


Есть о чем подумать: проблема производительности, в будущем, когда вы будете иметь дело с большим объемом данных, возможно, перепишете вызов функции, а затем перекрестное соединение.


Karthik_Mahalingam

5

Bryian Tan

Спасибо!!!!

Garth J Lancaster

приятно !

Member 12245539

5

Bryian Tan

Спасибо!