กูรู SQL ช่วยทีครับ(query case ซับซ้อน)

เกี่ยวกับ ปัญหาการใช้งาน การติดตั้ง ฐานข้อมูล MySql Oracle MSSQL ect...
การเขียน คำสั่ง SQL เพื่อดึกข้อมูล บอร์ดนี้ควรระบุโครงสร้างตารางของท่านในคำถามด้วยนะ

Moderator: mindphp

jinky153
PHP Newbie
PHP Newbie
Posts: 5
Joined: 26/06/2010 1:05 pm

กูรู SQL ช่วยทีครับ(query case ซับซ้อน)

Post by jinky153 »

รบกวนพี่ๆช่วยหาวิธี query ในกรณีนี้ทีครับ (SQL Server Management Studio)

มีตาราง Table1
ID Type_ Color
1 A RED
2 A RED
3 B RED
4 C BLUE
5 D GREEN

นำมา query ให้แสดงเป็น
Type_ RED BLUE GREEN
A 2 0 0
B 1 0 0
C 0 1 0
D 0 0 1

โดยที่ใน Table1 สามารถใส่ type ได้ไม่จำกัด และสามารถมีสีได้ไม่จำกัดโดยเมื่อเพิ่มใน Table1 แล้ว ที่ query ก็จะมีสีเพิ่มตามนั้นด้วย
ผมจนปัญญาในการแก้โจทย์นี้จริงๆครับ รบกวนพี่ๆที่มีความสามารถช่วยทีครับ

ตอนนี้ผมทำได้แค่ query ได้เมื่อเพิ่ม Type_ เข้ามาแต่จะให้เพิ่มสีด้วยยังคิดไม่ออกเลยครับ
SELECT Type_,
sum(CASE Color WHEN 'RED' THEN 1 ELSE 0 END) RED ,
sum(CASE Color WHEN 'BLUE' THEN 1 ELSE 0 END) BLUE ,
sum(CASE Color WHEN 'GREEN' THEN 1 ELSE 0 END) GREEN
FROM Table1
GROUP BY Type_
ปล.คิดว่าต้องใช้ pivot แต่ใช้ไม่เป็นครับ

User avatar
imsn
PHP Super Member
PHP Super Member
Posts: 375
Joined: 07/05/2010 12:58 pm
Contact:

Re: กูรู SQL ช่วยทีครับ(query case ซับซ้อน)

Post by imsn »

query สองครั้งก็ได้ครับ
ครั้งแรก เอา ชื่อสีมาทั้งหมด
แล้วใส่ ใน CASE ... เอา
ช่วยตอบเพราะอยากโปรโหมทเว็บ คิคิคลิกเลย
หาเพื่อนฝรั่งคุย M ...

jinky153
PHP Newbie
PHP Newbie
Posts: 5
Joined: 26/06/2010 1:05 pm

Re: กูรู SQL ช่วยทีครับ(query case ซับซ้อน)

Post by jinky153 »

รบกวนบอกทีว่าเขียนอย่างไรดีครับ ถ้า query ชื่อสีทั้งหมดมาแล้วจะมาใส่ในชื่อสี
sum(CASE Color WHEN 'ชื่อสี' THEN 1 ELSE 0 END) ชื่อสี
ต้องเขียนอย่างไรครับเรื่อง dynamic นี่ผมไม่รู้เรื่องเลยครับ

User avatar
imsn
PHP Super Member
PHP Super Member
Posts: 375
Joined: 07/05/2010 12:58 pm
Contact:

Re: กูรู SQL ช่วยทีครับ(query case ซับซ้อน)

Post by imsn »

ใช้ Mssql กับ php หรือเปล่าครับ
ช่วยตอบเพราะอยากโปรโหมทเว็บ คิคิคลิกเลย
หาเพื่อนฝรั่งคุย M ...

jinky153
PHP Newbie
PHP Newbie
Posts: 5
Joined: 26/06/2010 1:05 pm

Re: กูรู SQL ช่วยทีครับ(query case ซับซ้อน)

Post by jinky153 »

ใช้ Mssql ครับ
ตอนนี้แก้ปัญหาได้แล้วครับ
ใช้ DECLARE @string VARCHAR(MAX) เอาครับ
แล้วทำเป็น Dynamic Pivot

User avatar
imsn
PHP Super Member
PHP Super Member
Posts: 375
Joined: 07/05/2010 12:58 pm
Contact:

Re: กูรู SQL ช่วยทีครับ(query case ซับซ้อน)

Post by imsn »

เขียนไปไงครับ แชร์กันหน่อย
ช่วยตอบเพราะอยากโปรโหมทเว็บ คิคิคลิกเลย
หาเพื่อนฝรั่งคุย M ...

jinky153
PHP Newbie
PHP Newbie
Posts: 5
Joined: 26/06/2010 1:05 pm

Re: กูรู SQL ช่วยทีครับ(query case ซับซ้อน)

Post by jinky153 »

DECLARE @SQLCMD VARCHAR(MAX)

IF OBJECT_ID('View2') IS NOT NULL
BEGIN
DROP VIEW View2
END
SET @SQLCMD = 'CREATE VIEW View2 AS
SELECT DISTINCT Color
FROM Table1'
EXECUTE(@SQLCMD)


DECLARE @PivotColumnHeaders VARCHAR(MAX)
SELECT @PivotColumnHeaders =
COALESCE(
@PivotColumnHeaders + ',[' + cast(Color as varchar) + ']',
'[' + cast(Color as varchar)+ ']'
)
FROM View2

IF OBJECT_ID('View3') IS NOT NULL
BEGIN
DROP VIEW View3
END
SET @SQLCMD = '
CREATE VIEW View3 AS SELECT Type_,'+ @PivotColumnHeaders +' FROM Table1
PIVOT (COUNT(Color)
FOR Color IN('+ @PivotColumnHeaders +'))
AS P'
EXECUTE(@SQLCMD)

DECLARE @test VARCHAR(MAX)
SELECT @test =
COALESCE(
@test + ',SUM(' + cast(Color as varchar) + ') ' + cast(Color as varchar),
'SUM(' + cast(Color as varchar)+ ') ' + cast(Color as varchar)
)
FROM View2

SET @SQLCMD = '
SELECT Type_,'+ @test +' FROM View3
GROUP BY Type_'

EXECUTE(@SQLCMD)

jinky153
PHP Newbie
PHP Newbie
Posts: 5
Joined: 26/06/2010 1:05 pm

Re: กูรู SQL ช่วยทีครับ(query case ซับซ้อน)

Post by jinky153 »

ถ้าท่านใดมีวิธีที่ง่ายกว่านี้รบกวนบอกทีนะครับ

Post Reply
  • Similar Topics
    Replies
    Views
    Last post

Return to “SQL - Database”

Who is online

Users browsing this forum: No registered users and 1 guest