sql serverdan crosstab query yaratmak

Mehmet Şahin

Destek Ekibi
Destek Ekibi
Katılım
13 Ekim 2005
Mesajlar
1,398
Excel Vers. ve Dili
Excel 2010 - 2013 Türkçe - İngilizce
Daha önce de söylediğim gibi, mssql ancak evde var. Akşam ilgileneceğim. İyi çalışmalar.
 

Mehmet Şahin

Destek Ekibi
Destek Ekibi
Katılım
13 Ekim 2005
Mesajlar
1,398
Excel Vers. ve Dili
Excel 2010 - 2013 Türkçe - İngilizce
Merhaba,
aşağıdaki ifadeyi ekleyebilirsiniz. Kolay gelsin.

Kod:
format(max(try_convert( date, tarih,104)),'dd/MM/yyyy', 'en-US' ) as tarih
 
Katılım
29 Nisan 2013
Mesajlar
53
Excel Vers. ve Dili
Office 2013, İngilizce
Merhaba,
aşağıdaki ifadeyi ekleyebilirsiniz. Kolay gelsin.

Kod:
format(max(try_convert( date, tarih,104)),'dd/MM/yyyy', 'en-US' ) as tarih
Merhaba teşekkür ederim,
Üstteki ifadeyi eski koddaki
convert( varchar, max(dates), 104) as DATES
satırından sonra ekedim fakat Incorrect syntax near 'format'. hatası verdi
 

Mehmet Şahin

Destek Ekibi
Destek Ekibi
Katılım
13 Ekim 2005
Mesajlar
1,398
Excel Vers. ve Dili
Excel 2010 - 2013 Türkçe - İngilizce
Merhaba,
try_convert fonksiyonu SQL Server 2012 ile kullanılıyor. Format(...,'dd/MM/yyyy', 'en-US') bloğunu çıkararak deneyebilirsiniz. Veya aşağıdaki gibi de sıralayabilirsiniz.
Kod:
 convert(  varchar,max(concat(right(CONVERT(VARCHAR,tarih),4),SUBSTRING(CONVERT(VARCHAR,tarih),4,2),left(CONVERT(VARCHAR,tarih),2))),112)  as tarih
 
Katılım
29 Nisan 2013
Mesajlar
53
Excel Vers. ve Dili
Office 2013, İngilizce
Merhaba,
try_convert fonksiyonu SQL Server 2012 ile kullanılıyor. Format(...,'dd/MM/yyyy', 'en-US') bloğunu çıkararak deneyebilirsiniz. Veya aşağıdaki gibi de sıralayabilirsiniz.
Kod:
 convert(  varchar,max(concat(right(CONVERT(VARCHAR,tarih),4),SUBSTRING(CONVERT(VARCHAR,tarih),4,2),left(CONVERT(VARCHAR,tarih),2))),112)  as tarih
Merhaba

Bu sefer de 'concat' is not a recognized built-in function name. diyor
Bir de bu kodları doğru yere yazıyorum değil mi ondan dolayı bu hatayı vermez sanırım ?
 

Mehmet Şahin

Destek Ekibi
Destek Ekibi
Katılım
13 Ekim 2005
Mesajlar
1,398
Excel Vers. ve Dili
Excel 2010 - 2013 Türkçe - İngilizce
Merhaba, notebook'da Sql server 2012 express kurulu. Her iki sorgu da başarı ile çalıştı. Versiyonunuz farklı mıdır? Kodu biraz değişiklikle tekrar ekliyorum. Tarih, tarih1, tarih2 şekinde üç ayrı kolon oluşturacaktır.
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,
format(max(try_convert( date, tarih,104)),'dd/MM/yyyy', 'en-US' ) as tarih1,
max(concat(right(CONVERT(VARCHAR,tarih),4),SUBSTRING(CONVERT(VARCHAR,tarih),4,2),left(CONVERT(VARCHAR,tarih),2)))  as tarih2
FROM dbo.ELZ_tbl
GROUP BY DS_No
 
Son düzenleme:
Katılım
29 Nisan 2013
Mesajlar
53
Excel Vers. ve Dili
Office 2013, İngilizce
merhaba
tarih sorununu hallettim.serverda silip yeniden yaratıp veri tipini datetime yaptığımda istediğim sonucu verdi.gayretlerin için teşekkür ederim.

peki bu 3 paketi saydırmayı nasıl yapabilirim?Yani 23,28 ve 29u ayrı sütunlar olarak veriyor bize.benim istediğim her 3 paketi de içeren satırı versin.bir nevi exceldeki count methodu
 
Katılım
29 Nisan 2013
Mesajlar
53
Excel Vers. ve Dili
Office 2013, İngilizce
merhaba
tarih sorununu hallettim.serverda silip yeniden yaratıp veri tipini datetime yaptığımda istediğim sonucu verdi.gayretlerin için teşekkür ederim.

peki bu 3 paketi saydırmayı nasıl yapabilirim?Yani 23,28 ve 29u ayrı sütunlar olarak veriyor bize.benim istediğim her 3 paketi de içeren satırı versin.bir nevi exceldeki count methodu
yani aslında null olmayan satırları bana versin
 

Mehmet Şahin

Destek Ekibi
Destek Ekibi
Katılım
13 Ekim 2005
Mesajlar
1,398
Excel Vers. ve Dili
Excel 2010 - 2013 Türkçe - İngilizce
Merhaba, 1. mesajınızdaki data üzerinde almak istediğiniz sonuç nasıl olmalıdır, örnek verirseniz daha iyi olur. İyi akşamlar.
 
Katılım
29 Nisan 2013
Mesajlar
53
Excel Vers. ve Dili
Office 2013, İ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

bu kod sonucu 23, 28, 29 ve max. tarih çıktılarını ayrı sütunlarda görebiliyorum. ama bu sütunlardaki her değerler dolu değil bazıları null yani karşılığı yok. ben de bu her üç pakete sahip (23,28,29) yani üçünde de bir değer bulunan satırları göstermesini istiyorum. umarım anlatabilmişimdir
 
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
Örnek SQL Db yi upload edebilir misiniz ?
 
Katılım
29 Nisan 2013
Mesajlar
53
Excel Vers. ve Dili
Office 2013, İngilizce
Merhaba
iş yerinde olduğum için upload edemem ama şöyle açıklayayım

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(dates), 104) as DATES
FROM dbo.DLZ__tbl
GROUP BY DS_No

Bu kodu çalıştırdığımda bana aşağıdakini veriyor.
DS_No 23 28 29 DATES
NULL NULL NULL NULL NULL
DS-xxxxxx NULL 10 2 14.01.2014
DS- xxxxxx NULL 4 14 23.01.2014
DS- xxxxxx NULL 5 7 14.01.2014
DS- xxxxxx 3 7 0 13.02.2014
DS- xxxxxx 23 14 3 09.04.2014
DS- xxxxxx 3 7 30 15.05.2014
DS- xxxxxx 22 15 0 12.05.2014
DS- xxxxxx 4 14 6 15.05.2014
DS- xxxxxx 2 23 NULL 16.05.2014
DS- xxxxxx 0 NULL NULL 22.05.2014
DS- xxxxxx 0 NULL NULL 22.05.2014

Ben istiyorum ki içerisinde null olan satırları bana göstermesin
 

Mehmet Şahin

Destek Ekibi
Destek Ekibi
Katılım
13 Ekim 2005
Mesajlar
1,398
Excel Vers. ve Dili
Excel 2010 - 2013 Türkçe - İngilizce
Merhaba,
sorgunun son kısmına yeşil olan bölümü ekler misiniz.

Kod:
GROUP BY DS_No
[COLOR=Green]having  SUM(CASE WHEN FNA = '23' THEN CAST(working_days AS Numeric(10)) END)  is not null 
     and SUM(CASE WHEN FNA = '28' THEN CAST(working_days AS Numeric(10)) END) is not null
     and SUM(CASE WHEN FNA = '29' THEN CAST(working_days AS Numeric(10)) END) is not null[/COLOR]
 
Son düzenleme:
Katılım
29 Nisan 2013
Mesajlar
53
Excel Vers. ve Dili
Office 2013, İngilizce
merhaba
kod çalıştı ama sadece ilk satırdaki null lar gitti. diğerleri duruyor
 
Katılım
29 Nisan 2013
Mesajlar
53
Excel Vers. ve Dili
Office 2013, İngilizce
Merhaba bir sorum daha var diğerine göre daha basit

DS_No activities
aaaa 1
aaaa 1
aaaa 1
bbbb 1
bbbb 1
cccc 1
cccc 1
cccc 1


bunu

DS_No activities
aaaa 3
bbbb 2
cccc 3

şeklinde nasıl yazabilirim?
 

Mehmet Şahin

Destek Ekibi
Destek Ekibi
Katılım
13 Ekim 2005
Mesajlar
1,398
Excel Vers. ve Dili
Excel 2010 - 2013 Türkçe - İngilizce
Bir önceki sorununuz için 33 no'lu mesajdaki kodu deneyiniz.
son sorunuz için
Kod:
select DS_No,sum(activities) from tablo_adı group by DS_No
İyi çalışmalar.
 
Son düzenleme:
Katılım
29 Nisan 2013
Mesajlar
53
Excel Vers. ve Dili
Office 2013, İngilizce
çok teşekkür ederim 2 kod da çalıştı. içinde null olan satırları sildik peki gene aynı mantıkla içinde 0 (sıfır) olan satırları nasıl silebiliriz?
 

Mehmet Şahin

Destek Ekibi
Destek Ekibi
Katılım
13 Ekim 2005
Mesajlar
1,398
Excel Vers. ve Dili
Excel 2010 - 2013 Türkçe - İngilizce
Tablonuzda "working_days" alanında 0 olan değerler mi var? Sadece açıklamalarınız ile simüle etmeye çalışmak zorundayım. Aslında xls formatında belli bir veri örneği (özel bilgiler olmamak kaydıyla) eklebilseniz çok daha hızlı sonuçlar bulabiliriz. Eğer yukarıda yazdığım gibi ise aşağıdaki yeşil kodu
ekleyiniz.
Kod:
...
FROM dbo.tablo_adı
[COLOR=Green]where working_days>0[/COLOR]
GROUP BY DS_No
...
not: Ayrıca, silmiyoruz, sadece seçmiyoruz :)
 
Son düzenleme:
Katılım
29 Nisan 2013
Mesajlar
53
Excel Vers. ve Dili
Office 2013, İngilizce
aıklamanız için teşekkür ederim pazartesi deneyeceğim :)
 
Katılım
29 Nisan 2013
Mesajlar
53
Excel Vers. ve Dili
Office 2013, İngilizce
Tablonuzda "working_days" alanında 0 olan değerler mi var? Sadece açıklamalarınız ile simüle etmeye çalışmak zorundayım. Aslında xls formatında belli bir veri örneği (özel bilgiler olmamak kaydıyla) eklebilseniz çok daha hızlı sonuçlar bulabiliriz. Eğer yukarıda yazdığım gibi ise aşağıdaki yeşil kodu
ekleyiniz.
Kod:
...
FROM dbo.tablo_adı
[COLOR=Green]where working_days>0[/COLOR]
GROUP BY DS_No
...
not: Ayrıca, silmiyoruz, sadece seçmiyoruz :)

teşekkür ederim :)
 
Üst