Tablo içinde dikey gelen verileri yatay şekilde göstermek

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
denizfatihi
Üye
Mesajlar: 254
Kayıt: 16 Şub 2004 06:12
Konum: istanbul

Tablo içinde dikey gelen verileri yatay şekilde göstermek

Mesaj gönderen denizfatihi »

Merhaba,

Aşağıdaki sorgu ile dikey gelen verileri yatay almak istiyorum ama bir türlü olmadı, hatayı nerede yapıyorum ?

Kod: Tümünü seç

SELECT BEL.SICIL, P.ADI+' '+ P.SOYADI AS ADI_SOYADI, 
(CASE WHEN BID=1 THEN  BEL.DURUM END)  [VESIKALIK FOTOGRAF)],
(CASE WHEN BID=2 THEN  BEL.DURUM END)  [SABIKA KAYDI],
(CASE WHEN BID=3 THEN  BEL.DURUM END)  [DIPLOMA],
(CASE WHEN BID=4 THEN  BEL.DURUM END)  [SAGLIK RAPORU],
(CASE WHEN BID=5 THEN  BEL.DURUM END)  [IS BASVURU FORMU],
(CASE WHEN BID=6 THEN  BEL.DURUM END)  [AGI TAAHÜTNAMESÝ],
FROM BELGEHAR BEL
JOIN PERSONEL P ON (P.SICIL = BEL.SICIL)
speed60
Üye
Mesajlar: 53
Kayıt: 07 Eki 2011 08:07

Re: Tablo içinde dikey gelen verileri yatay şekilde gösterme

Mesaj gönderen speed60 »

Kod: Tümünü seç

SELECT ADI+' '+ SOYADI AS ADI_SOYADI,
case (SELECT top 1 [VESIKALIK FOTOGRAF] FROM BELGEHAR as BEL WHERE (BEL.SICIL=SICIL and BID=1)) AS FOTOGRAF,
case (SELECT top 1 [SABIKA KAYDI] FROM BELGEHAR as BEL WHERE (BEL.SICIL=SICIL and BID=2)) AS SABIKAKAYDI, 
case (SELECT top 1 DIPLOMA FROM BELGEHAR as BEL WHERE (BEL.SICIL=SICIL and BID=3)) AS DIPLOMA,
case (SELECT top 1 [SAGLIK RAPORU] FROM BELGEHAR as BEL WHERE (BEL.SICIL=SICIL and BID=4)) AS SAGLIKRAPOR,
case (SELECT top 1 [IS BASVURU FORMU] FROM BELGEHAR as BEL WHERE (BEL.SICIL=SICIL and BID=5)) AS ISBASVURUFORMU,
case (SELECT top 1 [AGI TAAHÜTNAMESİ] FROM BELGEHAR as BEL WHERE (BEL.SICIL=SICIL and BID=6)) AS AGI
FROM PERSONEL
bu kodlama normalde yan yana dizmesi lazım
denizfatihi
Üye
Mesajlar: 254
Kayıt: 16 Şub 2004 06:12
Konum: istanbul

Re: Tablo içinde dikey gelen verileri yatay şekilde gösterme

Mesaj gönderen denizfatihi »

Olmadı, soruyu çalıştırınca aşağıdaki hatayı veryor.

Kod: Tümünü seç

Msg 156, Level 15, State 1, Line 2
Incorrect syntax near the keyword 'AS'.
Msg 156, Level 15, State 1, Line 3
Incorrect syntax near the keyword 'AS'.
Msg 156, Level 15, State 1, Line 4
Incorrect syntax near the keyword 'AS'.
Msg 156, Level 15, State 1, Line 5
Incorrect syntax near the keyword 'AS'.
Msg 156, Level 15, State 1, Line 6
Incorrect syntax near the keyword 'AS'.
Msg 156, Level 15, State 1, Line 7
Incorrect syntax near the keyword 'AS'.
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Tablo içinde dikey gelen verileri yatay şekilde gösterme

Mesaj gönderen thelvaci »

SQL Server'da PIVOT komutuna bakabilirsiniz.
speed60
Üye
Mesajlar: 53
Kayıt: 07 Eki 2011 08:07

Re: Tablo içinde dikey gelen verileri yatay şekilde gösterme

Mesaj gönderen speed60 »

Kod: Tümünü seç

SELECT ADI+' '+ SOYADI AS ADI_SOYADI,
case (SELECT top 1 [VESIKALIK FOTOGRAF] FROM BELGEHAR as BEL WHERE (BEL.SICIL=SICIL and BID=1)) FOTOGRAF,
case (SELECT top 1 [SABIKA KAYDI] FROM BELGEHAR as BEL WHERE (BEL.SICIL=SICIL and BID=2)) SABIKAKAYDI, 
case (SELECT top 1 DIPLOMA FROM BELGEHAR as BEL WHERE (BEL.SICIL=SICIL and BID=3)) DIPLOMA,
case (SELECT top 1 [SAGLIK RAPORU] FROM BELGEHAR as BEL WHERE (BEL.SICIL=SICIL and BID=4)) SAGLIKRAPOR,
case (SELECT top 1 [IS BASVURU FORMU] FROM BELGEHAR as BEL WHERE (BEL.SICIL=SICIL and BID=5)) ISBASVURUFORMU,
case (SELECT top 1 [AGI TAAHÜTNAMESİ] FROM BELGEHAR as BEL WHERE (BEL.SICIL=SICIL and BID=6)) AGI
FROM PERSONEL
birde böyle denernisin
denizfatihi
Üye
Mesajlar: 254
Kayıt: 16 Şub 2004 06:12
Konum: istanbul

Re: Tablo içinde dikey gelen verileri yatay şekilde gösterme

Mesaj gönderen denizfatihi »

Merhaba,

Yine olmadı, sanırım olayı 3.parti bileşenlerle çözeceğim.
OutSource
Üye
Mesajlar: 7
Kayıt: 03 Şub 2015 04:35

Re: Tablo içinde dikey gelen verileri yatay şekilde gösterme

Mesaj gönderen OutSource »

denizfatihi yazdı:Merhaba,

Yine olmadı, sanırım olayı 3.parti bileşenlerle çözeceğim.
Dostum,

buna gerek yok.

Tam olarak tabloların yapısını yazarsan yardımcı olabilirim.
denizfatihi
Üye
Mesajlar: 254
Kayıt: 16 Şub 2004 06:12
Konum: istanbul

Re: Tablo içinde dikey gelen verileri yatay şekilde gösterme

Mesaj gönderen denizfatihi »

Merhaba,
Olayın iskeletini oluşturan 3 tablom var, personel, belge_turu ve belge_hareketleri personele ait beltelerin kontrolünü sağalmak amacı amacı ile heeket tablosuna true, veya false olarak kaydediyorum yanlız türleri çok geniş olduğu ve zaman içinde de arta bileceği için dikey bir şekilde kayıt yapılıyor bunu sicil numaranın yanına yatay pozisyonda rapor olarak almak istiyorum, yardımın ve ilgin için şimdinden teşekkürler.

BELGE_TURU DURUMU ID
VESİKALIK FOTOĞRAF (4 ADET) E 1
NÜFUS CÜZDANI FOTOKOPİSİ (2 ADET) E 2
NÜFUS CÜZDANI ÖRNEĞİ (MUHTARLIKTAN) E 3
SABIKA KAYDI (SAVCILIKTAN) E 4
EN SON İŞ YERİNDEN HİZMET BELGESİ E 5
İKAMETGAH BELGESİ (MUHTARLIKTAN) E 6
DİPLOMA E 7

BELGE HAREKETLERİ - BID alan belge türündeki ıd yi ifade etmekte.

SICIL DURUM REF BID
73 True 73-1 1
73 True 73-2 2
73 True 73-3 3
73 True 73-4 4
73 False 73-5 5
73 True 73-6 6
73 True 73-7 7
OutSource
Üye
Mesajlar: 7
Kayıt: 03 Şub 2015 04:35

Re: Tablo içinde dikey gelen verileri yatay şekilde gösterme

Mesaj gönderen OutSource »

Kod: Tümünü seç

		SELECT 
			OrderNo,
			OrderSeqNo,
			(CASE Status WHEN 1 THEN Length ELSE 0 END) AS Giris,
			(CASE Status WHEN 2 THEN Length ELSE 0 END) AS Cikis,
			(CASE Status WHEN 3 THEN Length ELSE 0 END) AS Transfer
		FROM Stock WITH (NOLOCK)
		WHERE OrderNo <> '' AND OrderSeqNo <> 0
		GROUP BY OrderNo, OrderSeqNo
yukarıdaki sql çalışıyor.

MSSQL kullanıyorsan 3 tablonun create cümlelerini paylaşırmısın?
denizfatihi
Üye
Mesajlar: 254
Kayıt: 16 Şub 2004 06:12
Konum: istanbul

Re: Tablo içinde dikey gelen verileri yatay şekilde gösterme

Mesaj gönderen denizfatihi »

Sorguya bir anlam veremedim, yanlış oldu sanırım
Tabloların create kısımları da aşağıdaki gibi

Belge Türleri

Kod: Tümünü seç

CREATE TABLE [dbo].[OZLUKBELGELERI](
	[BELGE_TURU] [varchar](80) NULL,
	[DURUMU] [varchar](5) NULL,
	[ID] [int] IDENTITY(1,1) NOT NULL
)
Hareketle

Kod: Tümünü seç

CREATE TABLE [dbo].[BELGEHAR](
	[SICIL] [int] NULL,
	[DURUM] [varchar](10) NULL,
	[REF] [varchar](10) NULL,
	[BID] [int] NULL,
	[ID] [int] IDENTITY(1,1) NOT NULL)
Personel

Kod: Tümünü seç

CREATE TABLE [dbo].[PERSONEL](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[SICIL] [int] NULL,
	[PID] [varchar](10) NULL,
	[KID] [varchar](10) NULL,
	[TCKIMLIK] [varchar](12) NULL,
	[ADI] [varchar](30) NULL,
	[SOYADI] [varchar](30) NULL,
	[DOGUMTAR] [smalldatetime] NULL,
	[ISEGIRTAR] [smalldatetime] NULL,
	[CIKTAR] [smalldatetime] NULL)
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: Tablo içinde dikey gelen verileri yatay şekilde gösterme

Mesaj gönderen unicorn64 »

thelvaci yazdı:SQL Server'da PIVOT komutuna bakabilirsiniz.
+1

bkz1
bkz2
bkz3
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
OutSource
Üye
Mesajlar: 7
Kayıt: 03 Şub 2015 04:35

Re: Tablo içinde dikey gelen verileri yatay şekilde gösterme

Mesaj gönderen OutSource »

Sanırım istediğin budur kardeşim.

Kod: Tümünü seç


SELECT ADI,
		SOYADI,
		KIMLIK,
		EHLIYET
FROM
	(
	SELECT ADI,
			SOYADI,
			MAX(CASE WHEN BID = 1 THEN OZLUKBELGELERI.BELGE_TURU END) AS KIMLIK,
			MAX(CASE WHEN BID = 2 THEN OZLUKBELGELERI.BELGE_TURU END) AS EHLIYET
	FROM PERSONEL
	LEFT OUTER JOIN BELGEHAR ON BELGEHAR.SICIL = PERSONEL.SICIL
	LEFT OUTER JOIN OZLUKBELGELERI ON OZLUKBELGELERI.ID = BELGEHAR.BID
	GROUP BY ADI, SOYADI
	)AS Q1

speed60
Üye
Mesajlar: 53
Kayıt: 07 Eki 2011 08:07

Re: Tablo içinde dikey gelen verileri yatay şekilde gösterme

Mesaj gönderen speed60 »

OutSource kardeş verdiğin kod denizfatihi nin istediği olayı gerçekleştiriyor ama nedense lütfedip olayımı çözdü teşekkürler demeyi unutmuş olabilir.
denizfatihi
Üye
Mesajlar: 254
Kayıt: 16 Şub 2004 06:12
Konum: istanbul

Re: Tablo içinde dikey gelen verileri yatay şekilde gösterme

Mesaj gönderen denizfatihi »

Merhaha,

Sorguyu görmeme rağmen database ofiste bende seyahatte olduğum için yorum yapma veya teşekkür etme imkanım olmadı, pazartesi ofise geçince haber vereceğim, öte yandan forum içinde bugüne kadar kimin yardımını aldım ise teşekkür etmişimdir, kendim çözmüş olsam dahi mutlaka başkaları da faydalansın diye paylaşmışımdır. Bilip bilmeden yargısız infazın sebebini de anlamış değilim.
denizfatihi
Üye
Mesajlar: 254
Kayıt: 16 Şub 2004 06:12
Konum: istanbul

Re: Tablo içinde dikey gelen verileri yatay şekilde gösterme

Mesaj gönderen denizfatihi »

Sayın OutSource ellerinize sağlık çok teşekkür ederim işimi çözdü.
Cevapla