Tek istediğim bu dönüştürmektirgöster SQL sonucu
Department | 201601 Print | 201601 Copy | 201602 Print | 201602 Copy | 201603 Print | 201603 Copy
------------------------------------------------------------------------------------------
Dept 1 | 10 | 20 | 30 | 40 | 50 | 60
Dept 2 | 20 | 10 | 40 | 30 | 60 | 50
Ben PIVOT
ile senaryoyu oluşturmaya çalışıyordum ama nasıl bilmiyorum Sütunlarda her bir dönemin "Yazdır" ve "Kopyala" öğelerini göstermek için Ayrıca, 'Dönem' değerleri bilinmeyeceğinden, bu nedenle betikteki değeri de kodlayamıyorum. Burada
SELECT [Department]
,[201601] AS [201601 Copy]
,[201602] AS [201602 Copy]
,[201603] AS [201603 Copy]
FROM
(SELECT [Copy], [Period], [Department] from #tempTable) AS ST
PIVOT
(SUM([Copy]) FOR [Period] IN ([201601],[201602],[201603])) AS PT
Ve
benim örnek verilerle tablo oluşturmak için komut dosyasıdır: Önceden herhangi cevap içinIF OBJECT_ID('tempdb..#tempTable') IS NOT NULL
DROP TABLE #tempTable
CREATE TABLE #tempTable(
[Period] varchar(50)
,[Department] varchar(50)
,[Print] int
,[Copy] int
)
INSERT INTO #tempTable VALUES
('201601', 'Dept 1', 10, 20)
,('201601', 'Dept 2', 20, 10)
,('201602', 'Dept 1', 30, 40)
,('201602', 'Dept 2', 40, 30)
,('201603', 'Dept 1', 50, 60)
,('201603', 'Dept 2', 60, 50)
Teşekkür
İşte benim girişimidir.
YANIT Aldığım cevaplar okudu ve son olarak aşağıdaki komut dosyasını oluşturun:
DECLARE @sql AS varchar(max);
SELECT @sql = 'SELECT [Department],' +
STUFF((
SELECT DISTINCT
',SUM(ISNULL(CASE [Period] WHEN ''' + [Period] + ''' THEN [Print] END, 0)) AS [' + [period] + ' Print]' +
',SUM(ISNULL(CASE [Period] WHEN ''' + [Period] + ''' THEN [Copy] END, 0)) AS [' + [period] + ' Copy]'
FROM #TempTable
FOR XML PATH('')
), 1, 1, '') +
'FROM #TempTable
GROUP BY [Department]';
PRINT @sql
EXEC(@sql);
SQL tabloları çok farklı hayvanlardır - satır ve sütun genellikle değiştirilebilir değildir. Bu sadece * sunum * amaçları içinse, veritabanında değil, sunum/rapor katmanında bunu yapmak daha iyi olacaktır. –
Cevabınızı bu şekilde gönderin - bir yanıt verin ve sunulan cevapların hiçbirinin probleminizi çözmediğini düşünüyorsanız (daha iyi) kabul edin. –