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

ตอบกระทู้

รูปแสดงอารมณ์
:icon_plusone: :like: :plusone: :gfb: :-D :) :( :-o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: :angry: :baa: :biggrin:
รูปแสดงอารมณ์อื่นๆ

BBCode เปิด
[img] เปิด
[url] เปิด
[Smile icon] เปิด

กระทู้แนะนำ
   

มุมมองที่ขยายได้ กระทู้แนะนำ: กูรู SQL ช่วยทีครับ(query case ซับซ้อน)

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

โดย nungs » 21/11/2010 9:15 pm

query table with dist type -> ได้ type
query type -> สี

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

โดย jinky153 » 30/06/2010 12:07 am

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

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

โดย jinky153 » 30/06/2010 12:06 am

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)

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

โดย imsn » 29/06/2010 7:55 pm

เขียนไปไงครับ แชร์กันหน่อย

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

โดย jinky153 » 29/06/2010 6:52 pm

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

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

โดย imsn » 27/06/2010 8:30 pm

ใช้ Mssql กับ php หรือเปล่าครับ

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

โดย jinky153 » 26/06/2010 9:38 pm

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

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

โดย imsn » 26/06/2010 3:36 pm

query สองครั้งก็ได้ครับ
ครั้งแรก เอา ชื่อสีมาทั้งหมด
แล้วใส่ ใน CASE ... เอา

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

โดย jinky153 » 26/06/2010 1:26 pm

รบกวนพี่ๆช่วยหาวิธี 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 แต่ใช้ไม่เป็นครับ

ข้างบน