我想寫一個查詢,從表中檢索出結果。
當我的所有狀態的名稱都完成時,向我顯示完成。當狀態已經完成,但還有另一個狀態,如正在進行中或已創建,那么只顯示另一個狀態
Stoqn Stoqnov?
預期結果
| 伊萬-伊萬諾夫 |
Stoqn Stoqnov?
查詢:
SELECT distinct CustomName,
(CASE WHEN [STATUS] ='COMPLETED' THEN 'complete'
WHEN [STATUS] ='inprocess' THEN 'inprocess'
WHEN [STATUS] ='created' THEN 'created' END ) AS [STATUS]
from [dbo].[Customers].
uj5u.com熱心網友回復:
你可以做一些像下面這樣的事情,你計算每個客戶有多少種狀態,然后按優先順序選擇要顯示的狀態。
declare @Test table (CustomName varchar(32), [STATUS] varchar(32), [Order] int)
insert into @Test (CustomName, [STATUS], [Order] )
values (values)
('Ivan Ivanov', 'completed', 1) 。
('Stoqn Stoqnov', 'completed', 1) 。
('Dimityr Ivanov', 'completed', 1) 。
('Ivan Ivanov', 'completed', 2) 。
('Dimityr Ivanov', 'completed', 2) 。
('Ivan Ivanov', 'inprocess', 2) 。
('Stoqn Stoqnov', ' completed', 2),
('Dimityr Ivanov', 'completed', 3) 。
('Dimityr Ivanov', 'created', 4),
('Stoqn Stoqnov', ' completed', 3),
('Ivan Ivanov', 'completed', 4) 。
('Stoqn Stoqnov', 'completed', 4) 。
with cte as (
select CustomName
, sum(case when [ status] = 'completed' then 1 else 0 end) over (partition by CustomName) Completed
, sum(case when [status] = 'created' then 1 else 0 end) over (partition by CustomName) Created
, sum(case when [status] = 'inprocess' then 1 else 0 end) over (partition by CustomName) InProcess
從 @Test
)
select CustomName
--如果需要,這個邏輯可以更復雜。
, case when InProcess > 0 then 'In Process' when Created> 0 then 'Credated' else 'completed' end
from cte
group by CustomName, Completed, Created, InProcess;
回傳:
注意:提供我所展示的DDL DML,使人們更容易得到幫助。
uj5u.com熱心網友回復:
我不認為這需要視窗函式或交叉連接,只是一個簡單的GROUP BY與條件計數
SELECT
自定義名稱。
CASE WHEN COUNT(CASE WHEN [status] = 'created' THEN 1 END) > 0 THEN ' Created'
WHEN COUNT(CASE WHEN [ status] = 'inprocess' THEN 1 END) > 0 THEN 'In Process' >。
ELSE '已完成' END
FROM YourTable t
GROUP BY t.CustomName。
uj5u.com熱心網友回復:
試試下面的方法:
這個想法是使用cte來找到所有包含不同型別狀態的客戶名稱
然后使用UNION ALL來查找所有ONLY包含 "已完成 "狀態的客戶名稱
;WITH cte AS (
SELECT DISTINCT CustomName, [STATUS].
FROM [dbo].[Customers].
WHERE [STATUS] <> 'Completed')
)
SELECT *
FROM cte
UNIONALL
SELECT DISTINCT CustomName, [STATUS]
FROM [dbo].[Customers].
WHERE CustomName NOT IN (SELECT CustomName FROM cte)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/314780.html
標籤:
