none
gun değerlerini alma, RRS feed

  • Soru

  • arkadaşlar mrb,

    verilere göre, herhangi bir personelin, aya göre (9) ,günler tek satırda olacak şekilde çalışma dökumu almak istiyorum.

    şöyle ki,

    id=1 personeli için,

    günler    :       1-2-3-4-5-6-7-8-9-10-11......31

    n.mesai  :      1-1-0-1-1-1-0-0-1-0-0-0.....       şeklinde ,



    • Düzenleyen canleveent 4 Ocak 2020 Cumartesi 11:08
    9 Aralık 2019 Pazartesi 09:44

Tüm Yanıtlar

  • Pivot ile deneyebilirsin; 

    SELECT * FROM (
    SELECT DAY([Tarih]) as [GUN], COUNT(NormalMesai) as [total]  FROM [dbo].[Puantajlar] WHERE [PersonelId] = 1 GROUP BY DAY([Tarih])
    ) AS D 
    PIVOT(
    SUM([total]) FOR [GUN] IN([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31])
    ) AS P;


    Altan Özdemir


    • Düzenleyen Altan Özdemir 9 Aralık 2019 Pazartesi 10:47
    • Yanıt Olarak Öneren CetinBasoz 10 Aralık 2019 Salı 17:42
    9 Aralık 2019 Pazartesi 10:47
  • Merhaba,

    Alternatif olarak aşağıdaki kodu deneyebilirsiniz. 

    DECLARE 
    @DINAMIKPIVOT AS NVARCHAR(MAX),
    @ALANLAR AS NVARCHAR(MAX),
    @BASLIKLAR AS NVARCHAR(MAX)
    
    SELECT @ALANLAR= ISNULL(@ALANLAR + ',','') +
    QUOTENAME(Tarih)
    FROM (SELECT DISTINCT Tarih FROM [dbo].[Puantajlar] WHERE Tarih<>'' ) AS cat
    GROUP BY Tarih ORDER by Tarih
    
    SELECT @BASLIKLAR 
    = ISNULL(@BASLIKLAR + ',','')
    + 'ISNULL(' + QUOTENAME(Tarih) + ', 0) AS '
    + QUOTENAME(CONVERT(NVARCHAR(11),Tarih,104))
    FROM (SELECT DISTINCT Tarih FROM [dbo].[Puantajlar] WHERE Tarih<>'') AS cat 
    GROUP BY Tarih order by Tarih
    
    SET @DINAMIKPIVOT =  ' SELECT Adi,Soyadi, ' + @BASLIKLAR + '  FROM (
    SELECT Adi,Soyadi,PUANTAJ.Tarih,PUANTAJ.[NormalMesai]
    FROM  [dbo].[Personeller] AS PERSONEL INNER JOIN  [dbo].[Puantajlar]  AS PUANTAJ ON PUANTAJ.PersonelId=PERSONEL.ID
    ) t PIVOT
    (SUM(NormalMesai)FOR Tarih IN( ' + @ALANLAR + ') ) p 
    ORDER BY 1
    ';

    • Yanıt Olarak Öneren CetinBasoz 10 Aralık 2019 Salı 17:42
    9 Aralık 2019 Pazartesi 10:52
  • Pivot ile deneyebilirsin; 

    SELECT * FROM (
    SELECT DAY([Tarih]) as [GUN], COUNT(NormalMesai) as [total]  FROM [dbo].[Puantajlar] WHERE [PersonelId] = 1 GROUP BY DAY([Tarih])
    ) AS D 
    PIVOT(
    SUM([total]) FOR [GUN] IN([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31])
    ) AS P;


    Altan Özdemir


    Peki, bu kodu pivot nedeniyle linq de yazamadım, bizahmet bunu linq ile yazabilir misiniz,

    • Düzenleyen canleveent 10 Aralık 2019 Salı 14:12
    9 Aralık 2019 Pazartesi 15:30