2016-04-05 25 views
1

Sütun satırları gibi matris sonucu oluşturmak istediğim buna benzer verilerim var.SQL Sorgusu Pivot Tablo Satırları Sütunlara

Seq JobNo  TrnDate  TrnHour 
1 J-000198 2016-04-02 5 
2 J-000198 2016-04-03 4 
3 J-000198 2016-04-04 8 
4 J-000198 2016-04-05 7 
5 J-000198 2016-04-06 2 
6 J-000198 2016-04-07 3 
7 J-000198 2016-04-08 6 

2016-04-02 tarihinde TrnDate günü cumartesi ve benzeriydi. Sonuç olarak sql sorgusu ile sonuç almak istiyorum ve kullanıcı tarafından ekleme/düzenleme yapmak için gridview uygulamasında popülasyon yapıyorum.

Saturday Sunday Monday Tuesday Wednesday Thursday Friday 
02  03  04  05  06  07  08 
5  4  8  7  2   3  6 

Bu mümkün mü? Lütfen yardım et. Teşekkür

Düzenlendi ---------

Its her JobNo için tam bir ay girişleri. Her gün için toplam yapar. Örneğin, bunun gibi bir satır daha eklerseniz, Cumartesi günü için toplamı 9 + 2 = 11 ve saatler 5 + 5 = 10 olarak belirtin. Her hafta için ayrı olmasını istiyorum.

Seq JobNo  TrnDate  TrnHour 
8 J-000198 2016-04-09 5 

cevap

2

bu deneyin:

SELECT col, [Saturday], [Sunday], [Monday], [Tuesday], 
     [Wednesday], [Thursday], [Friday] 
FROM (
    SELECT JobNo, x.col, x.val, 
     DATENAME(WEEKDAY, TrnDate) AS d 
    FROM mytable 
    CROSS APPLY (
    VALUES ('Hour', TrnHour), 
      ('Day', DATEPART(dd, TrnDate))) x(col, val) 
) AS src 
PIVOT (SUM(val) FOR d IN ([Saturday], [Sunday], [Monday], [Tuesday], 
          [Wednesday], [Thursday], [Friday])) AS pvt 

Demo here

farklı haftalarda hesaba katmak Eğer PIVOT kaynak tablo oluşturmak için kullanılan sorgu SELECT yan tümcesinde hafta numarasını içermek zorunda işlemi:

( ) Demo here
+0

Yanıt için teşekkürler Giorgos Betsos. Gönderiyi düzenledim. Birkaç satır var, tam ay satırları demektir. Her hafta için ayrı bir sonuç tutmak istiyorum ama – Raja

+0

@Raja değerlerini özetler. Ayrı haftaları hesaba katmak için yukarıdaki sorguyu kolayca değiştirebilirsiniz. Sadece 'src' türetilen tablonun 'SELECT' cümleciğine weeknumber ekleyin. –

+0

Bunu yapamam. Bu datepart (hafta, gün, 0, TrnDate)/7 * 7)/7 + 1 gibi hafta numaralarını alıyorum ama sorgunuza nasıl yazacağımı bilmiyorum – Raja

0

Bunu nasıl yapabilirsiniz?

SELECT info, [Saturday], [Sunday], [Monday], [Tuesday],[Wednesday],[Thursday], [Friday] 
FROM (
    SELECT 'Total Hour' as info, JobNo, trnHour,DATENAME(WEEKDAY, TrnDate) AS d FROM JobTable 
    union all 
    SELECT 'Date' info,JobNo, datepart(day,TrnDate) as trnHour,DATENAME(WEEKDAY,TrnDate) AS d FROM JobTable 
) AS src 
PIVOT (SUM(trnHour) FOR d IN ([Saturday], [Sunday], [Monday], [Tuesday],[Wednesday], [Thursday], [Friday])) AS pvt 

Haftalık bilge.

SELECT [week],info, [Saturday], [Sunday], [Monday], [Tuesday],[Wednesday],[Thursday], [Friday] 
FROM (
    SELECT 'Total Hour' as info, JobNo, trnHour,DATENAME(WEEKDAY, TrnDate) AS d,datepart(week,TrnDate) [week] FROM JobTable 
    union all 
    SELECT 'Date' info,JobNo, datepart(day,TrnDate) as trnHour,DATENAME(WEEKDAY,TrnDate) AS d,datepart(week,TrnDate) [week] FROM JobTable 
) AS src 
PIVOT (SUM(trnHour) FOR d IN ([Saturday], [Sunday], [Monday], [Tuesday],[Wednesday], [Thursday], [Friday])) AS pvt 
+0

[Çarşamba] 'da bir parantez eksik. FYI – smoore4

+0

Teşekkürler ama onun aynı sonucu gösteriliyor @Giorgos – Raja

+0

Teşekkür @SQLDBA .. – Husen