Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > .NET Framework > Forum > การเรียกใช้งาน sql pivot ถ้าต้องการจะดูข้อมูลที่กว่านี้ (ข้อมูลข้างในครับ) จะทำอย่างไรได้บ้างครับ



 

การเรียกใช้งาน sql pivot ถ้าต้องการจะดูข้อมูลที่กว่านี้ (ข้อมูลข้างในครับ) จะทำอย่างไรได้บ้างครับ

 



Topic : 100220



โพสกระทู้ ( 184 )
บทความ ( 0 )



สถานะออฟไลน์




ตอนนี้ผมใช้ sql pivot ประมาณนี้ครับ

Code (SQL)
DECLARE @Big TABLE (
	FullName VARCHAR(255),
	Date_Conv DATETIME,
	Time_Conv VARCHAR(5)
	)

INSERT INTO @Big VALUES ('Jim','2013-09-01','08:02')
INSERT INTO @Big VALUES ('Jim','2013-09-01','16:50')
INSERT INTO @Big VALUES ('Jim','2013-09-02','08:04')
INSERT INTO @Big VALUES ('Jim','2013-09-02','16:25')
INSERT INTO @Big VALUES ('Jim','2013-09-03','08:29')
INSERT INTO @Big VALUES ('Jim','2013-09-03','16:02')

SELECT *
FROM @Big
Pivot(Min(Time_Conv) FOR Date_Conv IN (
			[2013-09-01],
			[2013-09-02],
			[2013-09-03]
			)) AS Pvt1
UNION ALL
SELECT *
FROM @Big
Pivot(Max(Time_Conv) FOR Date_Conv IN (
			[2013-09-01],
			[2013-09-02],
			[2013-09-03]
			)) AS Pvt2


จากโค๊ตจะเห็นได้ว่า

Pvt1 จะหาค่าเวลาต่ำสุด (Min(Time_Conv))
Pvt2 จะหาค่าเวลาสูงสุด (Max(Time_Conv))

ผลคือมันจะได้ข้อมูลออกมาแค่ 2 บรรทัดครับ คือ ต่ำสุด และสูงสุด

ถ้าในกรณีที่เวลาใน Date_Conv นั้น ๆ (วันนั้น ๆ) มีข้อมูลเวลามากกว่า 2 ตัว เช่น 08:02, 16.00, 16.30 จะทำอย่างไรให้สามารถคิวรี่ออกมาได้ทั้งหมด (ของแต่ละวันครับ) จะทำอย่างไรได้บ้าง เพราะเท่าที่ศึกษาดูหลาย ๆ เว็บอ่ะครับ SQL Pivot ต้องให้ใส่ฟังก์ชันอย่างน้อย 1 อัน ถ้าเป็นแบบนี้เราจะทำอย่างไรได้บ้างครับ ขอบคุณครับ



Tag : .NET, Ms SQL Server 2012, VB.NET







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2013-09-09 15:08:45 By : golfkub View : 4247 Reply : 14
 

 

No. 1



โพสกระทู้ ( 177 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์


Code (SQL)
DECLARE @Big TABLE (
	FullName VARCHAR(255),
	Date_Conv DATETIME,
	Time_Conv VARCHAR(5)
	)

INSERT INTO @Big VALUES ('Jim','2013-09-01','08:02')
INSERT INTO @Big VALUES ('Jim','2013-09-01','16:50')
INSERT INTO @Big VALUES ('Jim','2013-09-02','08:04')
INSERT INTO @Big VALUES ('Jim','2013-09-02','16:25')
INSERT INTO @Big VALUES ('Jim','2013-09-03','08:29')
INSERT INTO @Big VALUES ('Jim','2013-09-03','16:02')
INSERT INTO @Big VALUES ('Jim','2013-09-03','16:03')

SELECT 
	Date_Conv AS [Date],
	Min(Time_Conv) AS [Min],
	Max(Time_Conv) AS [Max]
FROM 
	@big
GROUP BY
	Date_Conv







แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-09-09 15:26:21 By : คนงานตัดอ้อย
 


 

No. 2



โพสกระทู้ ( 184 )
บทความ ( 0 )



สถานะออฟไลน์


มันยังได้ออกมา 2 ค่าเหมือนเดิมอ่ะครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-09-10 09:12:53 By : golfkub
 

 

No. 3



โพสกระทู้ ( 177 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์


แล้วต้องการผลแบบไหนครับ ขอลองเป็นรูปก็ยังดีจินตนาการไม่ออก

Code (SQL)
DECLARE @Big TABLE (
	FullName VARCHAR(255),
	Date_Conv DATETIME,
	Time_Conv VARCHAR(5)
	)
-- Day 1
INSERT INTO @Big VALUES ('Jim','2013-09-01','08:00')
INSERT INTO @Big VALUES ('Jim','2013-09-01','09:02')
INSERT INTO @Big VALUES ('Jim','2013-09-01','12:30')
INSERT INTO @Big VALUES ('Jim','2013-09-01','14:52')
INSERT INTO @Big VALUES ('Jim','2013-09-01','15:04')
INSERT INTO @Big VALUES ('Jim','2013-09-01','16:50')


-- Day 2
INSERT INTO @Big VALUES ('Jim','2013-09-02','07:04')
INSERT INTO @Big VALUES ('Jim','2013-09-02','11:05')
INSERT INTO @Big VALUES ('Jim','2013-09-02','19:25')
INSERT INTO @Big VALUES ('Jim','2013-09-02','21:25')
INSERT INTO @Big VALUES ('Jim','2013-09-02','01:00')
INSERT INTO @Big VALUES ('Jim','2013-09-02','00:01')

-- Day 3
INSERT INTO @Big VALUES ('Jim','2013-09-03','06:29')
INSERT INTO @Big VALUES ('Jim','2013-09-03','09:02')
INSERT INTO @Big VALUES ('Jim','2013-09-03','10:53')
INSERT INTO @Big VALUES ('Jim','2013-09-03','12:03')
INSERT INTO @Big VALUES ('Jim','2013-09-03','14:35')
INSERT INTO @Big VALUES ('Jim','2013-09-03','16:03')

SELECT 
	Date_Conv AS [Date],
	Min(Time_Conv) AS [Min],
	Max(Time_Conv) AS [Max]
FROM 
	@big
GROUP BY
	Date_Conv


ผลลัพธ์จากคิวรี่ด้านบน
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-09-10 09:21:19 By : คนงานตัดอ้อย
 


 

No. 4

Guest


#NO xxx หน้าชื่นอกตรม

Code (SQL)
DECLARE @Big TABLE (
	FullName VARCHAR(255),
	Date_Conv DATETIME,
	Time_Conv VARCHAR(5)
	)

INSERT INTO @Big VALUES ('Jim','2013-09-01','08:02') --*****
INSERT INTO @Big VALUES ('Jim','2013-09-01','16:00') --*****
INSERT INTO @Big VALUES ('Jim','2013-09-01','16:30') --*****
INSERT INTO @Big VALUES ('Jim','2013-09-02','08:04')
INSERT INTO @Big VALUES ('Jim','2013-09-02','16:25')
INSERT INTO @Big VALUES ('Jim','2013-09-03','08:29')
INSERT INTO @Big VALUES ('Jim','2013-09-03','16:02')

;WITH DeepAss AS (
  SELECT ROW_NUMBER() OVER(PARTITION BY Fullname, Date_Conv ORDER BY Time_Conv) AS Sideline, *
  FROM @Big  
)
SELECT * FROM DeepAss 
PIVOT(MIN(time_conv) FOR Date_Conv IN (
			[2013-09-01],
			[2013-09-02],
			[2013-09-03]
			)) AS Pvt1



[x] นึกว่าโปรแกรมเลิกใช้งานไปแล้ว
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-09-10 12:29:25 By : ผ่านมา
 


 

No. 5

Guest


ตั้ง 2 กระทู้ แต่เป็นเรื่องเดียวกัน ด้วยคนฯเดียวกัน แต่ไม่ได้มีข้อสรุปที่ชัดเจน
(ทั้ง 2 กระทู้ ผมเข้าใจในสิ่งที่คุณคิด/ต้องการ และในทางกลับกัน)

อันนี้เป็นบทสรุป (ผมเก็บเอาไว้อ้างอิง) เรื่อง Pivot Table & Dynamic Pivot Table

Code (SQL)
DECLARE @Big TABLE (
	FullName VARCHAR(255),
	Date_Conv DATETIME,
	Time_Conv VARCHAR(5)
	)
	
DECLARE @ColsPivot AS NVARCHAR(MAX)
DECLARE @Query AS NVARCHAR(MAX)

INSERT INTO @Big VALUES ('Jim','2013-09-01','08:02') --*****
INSERT INTO @Big VALUES ('Jim','2013-09-01','16:00') --*****
INSERT INTO @Big VALUES ('Jim','2013-09-01','16:30') --*****
INSERT INTO @Big VALUES ('Jim','2013-09-02','08:04')
INSERT INTO @Big VALUES ('Jim','2013-09-02','16:25')
INSERT INTO @Big VALUES ('Jim','2013-09-03','08:29')
INSERT INTO @Big VALUES ('Jim','2013-09-03','16:02')

IF OBJECT_ID(N'tempdb..#TempTable') IS NOT NULL
	DROP TABLE #TempTable;
	
SELECT @colsPivot = STUFF((
			SELECT DISTINCT ',' + QUOTENAME(CONVERT(VARCHAR(8), Date_Conv, 112))
			FROM @Big
			FOR XML PATH(''),
				TYPE
			).value('.', 'NVARCHAR(MAX)'), 1, 1, '')

SET @Query = 'SELECT * FROM #TempTable 
              PIVOT(MIN(Time_Conv) FOR Date_Conv IN (' + @colsPivot + ')) 
              AS Pvt1';

WITH DeepAss
AS (
	SELECT ROW_NUMBER() OVER (
			PARTITION BY FullName,
			Date_Conv ORDER BY Time_Conv ASC
			) AS Sideline,
		*
	FROM @Big
	)	
SELECT * INTO #TempTable FROM DeepAss

EXECUTE (@query)

--IF OBJECT_ID(N'tempdb..#TempTable') IS NOT NULL
DROP TABLE #TempTable;


GoodLuck

[x] ศึกษาเพิ่มเติมครับ Select Distinct VS Group By
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-09-12 07:36:37 By : ผ่านมา
 


 

No. 6

Guest


#NO 5 บรรทัดที่ 32 แก้ไขเป็น ;WITH DeepAss
(Config SQL Server แตกต่างกัน)
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-09-12 07:55:43 By : ผ่านมา
 


 

No. 7



โพสกระทู้ ( 184 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 5 เขียนโดย : ผ่านมา เมื่อวันที่ 2013-09-12 07:36:37
รายละเอียดของการตอบ ::
ประมาณนี้แหละครับ ที่อยากให้ออกมา ขอบคุณครับคุณ ผ่านมา... เดี๋ยวผมขอลองประยุกต์ก่อนครับ ขอบคุณครับที่เสียสละเวลาตอบครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-09-12 11:10:16 By : golfkub
 


 

No. 8



โพสกระทู้ ( 184 )
บทความ ( 0 )



สถานะออฟไลน์


รบกวนสอบถามอีกนิดนึงครับ พอดีผมได้ลองนำโค๊ตไปใช้แล้ว พอเวลา ค้นหาข้อมูลตามช่วงเวลาอ่ะครับ

จากโค๊ตนี้คือ หาเวลาระหว่างวันที่ 3-5 ก.ย. 2013 ดังโค๊ตครับ

Code (SQL)
DECLARE @Big TABLE (
	FullName VARCHAR(255),
	Date_Conv DATETIME,
	Time_Conv VARCHAR(5)
	)
	
DECLARE @ColsPivot AS NVARCHAR(MAX)
DECLARE @Query AS NVARCHAR(MAX)

INSERT INTO @Big VALUES ('Jim','2013-09-01','08:02')
INSERT INTO @Big VALUES ('Jim','2013-09-01','16:00')
INSERT INTO @Big VALUES ('Jim','2013-09-01','16:30')
INSERT INTO @Big VALUES ('Jim','2013-09-02','08:04')
INSERT INTO @Big VALUES ('Jim','2013-09-02','16:25')
INSERT INTO @Big VALUES ('Jim','2013-09-03','08:29')
INSERT INTO @Big VALUES ('Jim','2013-09-03','16:02')

INSERT INTO @Big VALUES ('Jame','2013-09-01','08:02')
INSERT INTO @Big VALUES ('Jame','2013-09-01','16:00')
INSERT INTO @Big VALUES ('Jame','2013-09-02','16:30')
INSERT INTO @Big VALUES ('Jame','2013-09-04','08:04')
INSERT INTO @Big VALUES ('Jame','2013-09-02','16:25')
INSERT INTO @Big VALUES ('Jame','2013-09-04','08:29')
INSERT INTO @Big VALUES ('Jame','2013-09-04','16:02')

INSERT INTO @Big VALUES ('TestOne','2013-09-05','08:02')
INSERT INTO @Big VALUES ('TestOne','2013-09-05','16:00')
INSERT INTO @Big VALUES ('TestOne','2013-09-05','16:30')
INSERT INTO @Big VALUES ('TestOne','2013-09-06','08:04')
INSERT INTO @Big VALUES ('TestOne','2013-09-06','16:25')
INSERT INTO @Big VALUES ('TestOne','2013-09-07','08:29')
INSERT INTO @Big VALUES ('TestOne','2013-09-07','16:02')

IF OBJECT_ID(N'tempdb..#TempTable') IS NOT NULL
	DROP TABLE #TempTable;
	
SELECT @colsPivot = STUFF((
			SELECT DISTINCT ',' + QUOTENAME(CONVERT(VARCHAR(10), Date_Conv, 120))
			FROM @Big
			FOR XML PATH(''),
				TYPE
			).value('.', 'NVARCHAR(MAX)'), 1, 1, '')

SET @Query = 'SELECT * FROM #TempTable 
              PIVOT(MIN(Time_Conv) FOR Date_Conv IN (' + @colsPivot + ')) 
              AS Pvt1';

WITH DeepAss AS (

	SELECT ROW_NUMBER() OVER (PARTITION BY FullName,Date_Conv ORDER BY Time_Conv ASC) AS Sideline,
	
	* FROM @Big 
	
	WHERE Date_Conv BETWEEN '2013-09-03' AND '2013-09-05')

SELECT * INTO #TempTable FROM DeepAss

EXECUTE (@query)

DROP TABLE #TempTable;


แต่ผลที่ออกมาคือ มันมีคอลัมน์วันที่ ที่ไม่ได้อยู่ในเงื่อนไข (BETWEEN) แสดงออกมากด้วยครับ คือมันจะแสดงทั้งหมดของวันที่ที่มีในฐานข้อมูล แต่จะแสดงเป็นค่า NULL ไว้ครับ เราจะให้แสดงเฉพาะคอลัมน์วนที่ที่เราค้นหาได้อย่างไรครับ ขอบคุณครับ

มันออกมาแบบนี้ครับ

งงจุงเบย
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-09-13 10:45:37 By : golf
 


 

No. 9

Guest


เพิ่มเงื่อนไข บรรทัดที่ 37 - 42
Code (SQL)
SELECT @colsPivot = STUFF((
			SELECT DISTINCT ',' + QUOTENAME(CONVERT(VARCHAR(8), Date_Conv, 112))
			FROM @Big WHERE Date_Conv BETWEEN '2013-09-03' AND '2013-09-05'
			FOR XML PATH(''),
				TYPE
			).value('.', 'NVARCHAR(MAX)'), 1, 1, '')

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-09-13 11:06:13 By : ผ่านมา
 


 

No. 10

Guest


หัวข้อกระทู้ที่ 100363 ผมจนปัญญา
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-09-13 11:14:38 By : ผ่านมา
 


 

No. 11



โพสกระทู้ ( 184 )
บทความ ( 0 )



สถานะออฟไลน์


ตอนนี้ได้แล้วครับ จะรบกวนถามอะไรอีกซักข้อได้ไหมครับ ในกรณีของเวลา (ที่เอามาโชว์ในแต่ละวัน)

ถ้าเราจะเอาอีกคอลัมน์นึงที่เป็นตัวอักษร (I และ O) มาแสดงคู่กับเวลา ในรูปแบบของ 08:00 (I) , 16:00 (O) แบบนี้จะทำได้ไหมครับ

ขอบคุณครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-09-13 16:04:12 By : golfkub
 


 

No. 12



โพสกระทู้ ( 184 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 10 เขียนโดย : ผ่านมา เมื่อวันที่ 2013-09-13 11:14:38
รายละเอียดของการตอบ ::
อันนั้นผมก็ว่ายากครับ
แต่อย่างไรขอขอบคุณท่าน อาจารย์ ผ่านมา ด้วยนะครับ ที่ได้ชี้แนะให้ความกระจ่างกับผมครับ ขอบคุณอีกครั้งครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-09-13 16:05:16 By : golfkub
 


 

No. 13

Guest


Code (SQL)
SET @Query = 'SELECT * FROM #TempTable 
              PIVOT(MIN(Time_ConvXXX) FOR Date_Conv IN (' + @colsPivot + ')) 
              AS Pvt1';

;WITH DeepAss
AS (
	SELECT ROW_NUMBER() OVER (
			PARTITION BY FullName,
			Date_Conv ORDER BY Time_Conv ASC
			) AS Sideline,
		*, (SELECT CASE WHEN Time_Conv <= '12:00' THEN Time_Conv + '(I)' ELSE 'Ass (O)' END) As Time_ConvXXX
	FROM @Big
	)

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-09-13 18:20:29 By : ผ่านมา
 


 

No. 14



โพสกระทู้ ( 184 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-09-16 08:27:43 By : golfkub
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : การเรียกใช้งาน sql pivot ถ้าต้องการจะดูข้อมูลที่กว่านี้ (ข้อมูลข้างในครับ) จะทำอย่างไรได้บ้างครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 01
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่