sql serverdan crosstab query yaratmak

Katılım
29 Nisan 2013
Mesajlar
53
Excel Vers. ve Dili
Office 2013, İngilizce
Merhaba arkadaşlar

Arama yaptım ama benzer bir konu bulamadım varsa beni uyarın.

Benim bir access tablom var excelden içine aktardığım ve orda da şöyle değerler var;

Field1 Field11 Field14
aaaa 23 1
bbbb 28 1
cccc 23 2
aaaa 29 3
aaaa 28 2
bbbb 23 1
aaaa 29 3
cccc 29 1

Benim yapmak istediğim;
Field1 23 28 29
aaaa 1 2 6
bbbb 1 1
cccc 2 1


Yani sql server a öyle bir kod yazmalıyım ki field1 ve field11i sütun haline getirip onlara karşılık gelen değerleri toplamalı.Crosstab query ile yapabiliyorum ama bana servera yazmam gereken kod lazım

Yardımcı olursanız çok sevinirim, eğer bu konuyla alakalı bir başlık varsa lütfen beni yönlendirin.
 
Katılım
29 Nisan 2013
Mesajlar
53
Excel Vers. ve Dili
Office 2013, İngilizce
USE [DB_PMT_SQL]
SELECT dbo.DLZ_tbl
SUM(CASE WHEN [FNA] = '23' THEN working_days END) AS [23],
SUM(CASE WHEN [FNA] = '28' THEN working_days END) AS [28],
SUM(CASE WHEN [FNA] = '29' THEN working_days END) AS [29],

FROM dbo.DLZ_tbl
GROUP BY DS_No

Sorunu hallettim ama bu sefer de aşağıdaki hatayı veriyor.Sebebi ne olabilir?

Msg 156, Level 15, State 1, Line 3
Incorrect syntax near the keyword 'CASE'.
 

Mehmet Şahin

Destek Ekibi
Destek Ekibi
Katılım
13 Ekim 2005
Mesajlar
1,402
Excel Vers. ve Dili
Excel 2010 - 2013 Türkçe - İngilizce
Merhaba,
aşağıdaki şekilde dener misiniz? İyi çalışmalar.

Kod:
SELECT
DS_No,
SUM(CASE WHEN [FNA] = '23' THEN working_days END) AS [23],
SUM(CASE WHEN [FNA] = '28' THEN working_days END) AS [28],
SUM(CASE WHEN [FNA] = '29' THEN working_days END) AS [29]
FROM dbo.DLZ_tbl
GROUP BY DS_No
 
Katılım
29 Nisan 2013
Mesajlar
53
Excel Vers. ve Dili
Office 2013, İngilizce
Msg 8117, Level 16, State 1, Line 4
Operand data type nchar is invalid for sum operator.

Bu sefer de bu hatayı verdi
 

Mehmet Şahin

Destek Ekibi
Destek Ekibi
Katılım
13 Ekim 2005
Mesajlar
1,402
Excel Vers. ve Dili
Excel 2010 - 2013 Türkçe - İngilizce
Merhaba,
Sql server'da tablonuza benzer bir tabloyu, evdeki notebook'da oluşturup denedim ve örneğinizdeki istediğiniz sonucu aldım. Veri tiplerini farklı oluşturmuş olabilirim. İlgili field'ların veri tiplerini belirtirseniz, akşam test edebilirim.
 
Katılım
29 Nisan 2013
Mesajlar
53
Excel Vers. ve Dili
Office 2013, İngilizce
veri tipi derken text,date vs. bundan mı bahsediyorsunuz?
 

Mehmet Şahin

Destek Ekibi
Destek Ekibi
Katılım
13 Ekim 2005
Mesajlar
1,402
Excel Vers. ve Dili
Excel 2010 - 2013 Türkçe - İngilizce
Evet, nchar, varchar, real, date vs.
 
Katılım
29 Nisan 2013
Mesajlar
53
Excel Vers. ve Dili
Office 2013, İngilizce
hepsi nchar. vaktiniz varsa şimdi bakabilir misiniz?
 

Mehmet Şahin

Destek Ekibi
Destek Ekibi
Katılım
13 Ekim 2005
Mesajlar
1,402
Excel Vers. ve Dili
Excel 2010 - 2013 Türkçe - İngilizce
İşyerinde bakamıyorum, sistem evde kurulu. Nchar alanlar dönüştürülmeli. Her toplam alanı aşağıdaki gibi dener misiniz.

Kod:
SUM(CASE WHEN [FNA] = '23' THEN CAST(working_days AS Numeric(10,2)) END) AS [23]
 
Katılım
29 Nisan 2013
Mesajlar
53
Excel Vers. ve Dili
Office 2013, İngilizce
Çok teşekkür ederim şimdi çalışıyor eline sağlık.sayenizde nchar ları numeric e dönüştürmem gerektiğini öğrendim :)

as numericten sonraki parantezde(10,2) yazmasının sebebi nedir? sql de yeniyim de her şeyi merak ediyorum
 

Mehmet Şahin

Destek Ekibi
Destek Ekibi
Katılım
13 Ekim 2005
Mesajlar
1,402
Excel Vers. ve Dili
Excel 2010 - 2013 Türkçe - İngilizce
Ondalık ayrımının solunda ve sağında kaç adet sayısal değer olması istendiğinin ifadesidir.
 
Son düzenleme:
Katılım
29 Nisan 2013
Mesajlar
53
Excel Vers. ve Dili
Office 2013, İngilizce
teşekkür ederim bilgilendirdiğin için :)

peki aynı şekilde tarihleri de sıralamak istersek ve tariherin yazım şekli sırasıyla gg.aa.yyyy şeklinde ise kodda ve veri tipinde nasıl bi değişiklik yapmak gerek?
 

Mehmet Şahin

Destek Ekibi
Destek Ekibi
Katılım
13 Ekim 2005
Mesajlar
1,402
Excel Vers. ve Dili
Excel 2010 - 2013 Türkçe - İngilizce
tam olarak anlayamadım. Tarihler nerede yer alıyor, bu sorguyla ilişkisi var mı, sorgu sonucu nasıl olacak? Daha detaylı yazabilirseniz fikir yürütebiliriz.
 
Katılım
29 Nisan 2013
Mesajlar
53
Excel Vers. ve Dili
Office 2013, İngilizce
Merhaba arkadaşlar

Arama yaptım ama benzer bir konu bulamadım varsa beni uyarın.

Benim bir access tablom var excelden içine aktardığım ve orda da şöyle değerler var;

Field1 Field11 Field14
aaaa 23 1
bbbb 28 1
cccc 23 2
aaaa 29 3
aaaa 28 2
bbbb 23 1
aaaa 29 3
cccc 29 1

Benim yapmak istediğim;
Field1 23 28 29
aaaa 1 2 6
bbbb 1 1
cccc 2 1


Yani sql server a öyle bir kod yazmalıyım ki field1 ve field11i sütun haline getirip onlara karşılık gelen değerleri toplamalı.Crosstab query ile yapabiliyorum ama bana servera yazmam gereken kod lazım

Yardımcı olursanız çok sevinirim, eğer bu konuyla alakalı bir başlık varsa lütfen beni yönlendirin.


En başta bunu yazmıştım.Şimdi üsteki field1, field11 ve field14ün yanında bir sütun daha olsun ve orada tarihler yer alsın.ve o tabloyu serverda crosstaba çeviren kodu yazdığımda,

Field1 23 28 29 tarih
aaaa 1 2 6 gg.aa.yyyy
bbbb 1 1 gg.aa.yyyy
cccc 2 1 gg.aa.yyyy

olarak versin ama birkaç çeşit değişik tarihlerden max. olanları oraya yazsın
 

Mehmet Şahin

Destek Ekibi
Destek Ekibi
Katılım
13 Ekim 2005
Mesajlar
1,402
Excel Vers. ve Dili
Excel 2010 - 2013 Türkçe - İngilizce
Merhaba,
ancak şimdi inceleyebildim. Kodu aşağıdaki gibi değiştiriniz.
İyi çalışmalar.

Kod:
SELECT
DS_No,
SUM(CASE WHEN [FNA] = '23' THEN CAST(working_days AS Numeric(10)) END) AS [23],
SUM(CASE WHEN [FNA] = '28' THEN CAST(working_days AS Numeric(10)) END) AS [28],
SUM(CASE WHEN [FNA] = '29' THEN CAST(working_days AS Numeric(10)) END) AS [29],
convert( varchar, max(tarih), 104) as tarih
FROM dbo.ELZ_tbl
GROUP BY DS_No
 
Katılım
29 Nisan 2013
Mesajlar
53
Excel Vers. ve Dili
Office 2013, İngilizce
Merhaba,
Çok teşekkür ederim kod çalışıyor. ama bazı değerlerde max tarihi almıyor.örneğin ikinci değerde max tarihin 23.01.2014 olması gerekirken 31.12.2013 ü alıyor.
Sebebi ne olabilir?
 
Katılım
29 Haziran 2005
Mesajlar
158
Excel Vers. ve Dili
MS Office Professional Plus 2013 64 Bit -Eng
MSSQL 2012 R2 64 Bit
31 , 23 den büyük o yüzden :) , formatlardan kaynaklanan bir sorun...alan tipinin DATE olması durumunda MAX tarihe göre çalışacaktır, NUMERIC yada INT olduğunda ise hangi rakam daha büyük ise onu alacaktır...ilk 2 basamağa bakar...
 

Mehmet Şahin

Destek Ekibi
Destek Ekibi
Katılım
13 Ekim 2005
Mesajlar
1,402
Excel Vers. ve Dili
Excel 2010 - 2013 Türkçe - İngilizce
31 , 23 den büyük o yüzden :) , formatlardan kaynaklanan bir sorun...alan tipinin DATE olması durumunda MAX tarihe göre çalışacaktır, NUMERIC yada INT olduğunda ise hangi rakam daha büyük ise onu alacaktır...ilk 2 basamağa bakar...
Açıklamayı arkadaş yapmış. Sorun, bizim veritabanınızdaki yapıyı bilmememizden kaynaklanıyor. Data tipi nedir, ona göre bir çözüm bulunabilir.
 
Katılım
29 Nisan 2013
Mesajlar
53
Excel Vers. ve Dili
Office 2013, İngilizce
teşekkkür ederim :)

değişikliği yapıyorum ama kaydetmeme izin vermiyor."Saving changes is not permitted....." bir uyarı ekranı çıkıyor.
 
Katılım
29 Nisan 2013
Mesajlar
53
Excel Vers. ve Dili
Office 2013, İngilizce
nchar tipinde ama convert edince hallolur sanmıştım
 
Üst