2013-03-26 21 views
8

È possibile unire 2 righe in una singola riga in SSRS 2008? Ogni parte avrà un record per ogni sitoSQL Server Unisci 2 righe in 1

+---------------+-------+-------+ 
|Part Number |Cost |Site | 
+---------------+-------+-------+ 
|1    |2.4 |Site 1 | 
|1    |68.8 |Site 2 | 
+---------------+-------+-------+ 

Risultato desiderato

+-----------+-------+-------+ 
|Part Number|Site 1 |Site 2 | 
+-----------+-------+-------+ 
| 1   |2.4 |68.8 | 
+-----------+-------+-------+ 

Grazie

+0

È necessario trovare le domande sul TAB CROSS. – Prasanna

risposta

10

Se conoscete i numeri del sito/nomi non cambierà dinamicamente quindi possono utilizzare CASE WHEN: s

SELECT PartNumber, 
MAX(CASE WHEN Site=1 THEN Cost ELSE NULL END) AS Site1_Cost, 
MAX(CASE WHEN Site=2 THEN Cost ELSE NULL END) AS Site2_Cost 
FROM Parts 
GROUP BY PartNumber 

Raggruppando abbiamo eliminato un valore NULL. ..

Qui link con SQL Fiddle esempio

+0

Grazie per l'aiuto, questa semplice soluzione mi ha risolto il problema – Spacko

+0

se voglio che tutti i record siano spostati non solo il massimo di quello che dovrei fare – Strikers

1

Questo tipo di trasformazione dei dati è conosciuto come un PIVOT. A partire da SQL Server 2005, esiste una funzione che può trasporre i dati in colonne per te.

Se si dispone di un numero noto di Site valori che si desidera trasformare in colonne, allora si può codificare la query:

select part_number, [Site 1], [Site 2] 
from 
(
    select part_number, cost, site 
    from yourtable 
) src 
pivot 
(
    sum(cost) 
    for site in ([Site 1], [Site 2]) 
) piv; 

Vedi SQL Fiddle with Demo

Ma se si dispone di un numero sconosciuto di valori, allora si avrà bisogno di utilizzare SQL dinamico per generare l'elenco delle colonne da utilizzare nella query:

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(site) 
        from yourtable 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query = 'SELECT part_number,' + @cols + ' 
      from 
      (
       select part_number, cost, site 
       from yourtable 
      ) x 
      pivot 
      (
       sum(cost) 
       for site in (' + @cols + ') 
      ) p ' 

execute(@query) 

See 01.238.896,860982 millions. Entrambi dare il risultato:

| PART_NUMBER | SITE 1 | SITE 2 | 
--------------------------------- 
|   1 | 2.4 | 68.8 | 
+0

Grazie mille per la soluzione – Spacko

0

In SSRS per è necessario utilizzare MATRIX rapporto per convertire le righe in colonne senza utilizzare PIVOT operator

Supponiamo di avere un tavolo SSRSPivot

Create table SSRSPivot 
(PartNumber int ,Cost decimal(18,2),Site varchar(max)) 


Insert into SSRSPivot 
values 
(1,2.4,'Site 1'), 
(1,68.8,'Site 2') 

i dati vengono nel formato sottostante

+---------------+-------+-------+ 
|PartNumber |Cost |Site | 
+---------------+-------+-------+ 
|1    |2.4 |Site 1 | 
|1    |68.8 |Site 2 | 
+---------------+-------+-------+ 

Creare un nuovo report vuoto e il nome come PIVOT .Create un DataSource e nel set di dati scrivere la query

Select PartNumber ,Cost,Site from SSRSPivot 

enter image description here

Trascinare un matrix dalla casella degli strumenti nel SSRS designer.For Rows selezionare PartNumber.Per le colonne selezionare Site e per i dati selezionare Sum(Cost)

enter image description here

Quando si esegue il passo precedente, si ottengono i row e column dettagli come quella qui sotto

enter image description here

risultato finale assomigliare a

enter image description here