2015-08-10 18 views
7

Tôi mới sử dụng SQL.SQL: GROUP theo nhiều cột với câu lệnh CASE

Tôi muốn sử dụng GROUP BY với tuyên bố CASE, để nhóm các kết quả theo cách cụ thể nếu @myboolean là đúng sự thật.

Tôi đã xem nhiều ví dụ về cách sử dụng GROUP BYCASE BY với một trường đơn lẻ hoặc cách sử dụng GROUP BY với nhiều trường không có tuyên bố CASE.

Tôi không biết cách kết hợp cả hai. Khi tôi kèm theo GROUP BY trường trong báo cáo kết quả CASE, tôi nhận được một lỗi cú pháp:

Incorrect syntax near ','

Vì vậy, hoạt động này:

GROUP BY 
/* This works with no enclosing CASE statement */ 
field1, 
field2, 
field3, 
field4 

này tạo ra một lỗi cú pháp:

GROUP BY 
CASE WHEN (@myboolean=1) 
    THEN 
    field1, <-- ERROR HERE: Incorrect syntax near ',' 
    field2, 
    field3, 
    field4 
    ELSE 
    field1 
    END 

tôi đã xem xét các câu hỏi sau:

Tôi đang sử dụng Microsoft SQL Server Management Studio.

Xin lưu ý rằng tôi đang kế thừa một câu lệnh SQL rất phức tạp/dài, mà tôi muốn tránh thay đổi quá nhiều. Tôi không muốn chia truy vấn thành hai câu lệnh riêng biệt SELECT.

+0

một trường hợp chỉ có thể trở lại một cột/giá trị, không nhiều. – jarlh

+0

@jarlh cảm ơn. Tôi nên làm gì thay vào đó? –

+0

CASE không hoạt động như bạn mong đợi – mxix

Trả lời

8

Bạn có thể sử dụng ...

GROUP BY field1, 
    CASE WHEN @myboolean=1 THEN field2 END, 
    CASE WHEN @myboolean=1 THEN field3 END, 
    CASE WHEN @myboolean=1 THEN field4 END 

Nếu @myboolean không phải là 1 rằng đánh giá để NULL mà không ảnh hưởng đến kết quả.

Nếu trong quy trình lưu trữ, bạn cũng có thể sử dụng IF.

+0

Nếu @myboolean sẽ là 1 thì điều đó có đúng không? –

+0

@RahulDubey: nếu '@ myboolean' là' 1' thì 'CASE' đánh giá' true' và mệnh đề 'THEN' trả về biểu thức được định nghĩa phía sau, vì vậy' field2', 'field3' hoặc' field4'. –

+0

thực sự tốt đẹp được trả lời bởi bạn.Cảm ơn bạn. –

1

Bạn có thể thử cách này:

IF (@myboolean=1) 
BEGIN 
SELECT 
field1, 
field2, 
field3, 
field4 
FROM myTable 
GROUP BY 
field1, 
field2, 
field3, 
field4 

END 
ELSE 
BEGIN 
SELECT 
field1 
FROM myTable 
GROUP BY 
field1 
END 
Các vấn đề liên quan