我需要一些幫助來查詢。我有一個具有以下信息的表格:SQL Server 2012:如何在條件成1列時加入2個案例?
我需要分配一個點系統,每一個電話,通話不到1分鐘,1至5分鐘之間的通話,來電5至10分鐘,最後調用了10分鐘
目前我的查詢是這樣的:
Select distinct convert (date,AIV.PSEndTime,102) as TRXDATE
,AIV.Username
,AIV.FirstName+' '+AIV.LastName as Agent_Name
,AIV.ITypeDisplayValue
,convert (datetime,AIV.PSBeginTime,120) as PSBeginTime
,convert (datetime,AIV.PSEndTime,120) as PSEndTime
,convert(CHAR(8),DATEADD(second,AIV.Talking,0),108) as [Talking]
,CASE WHEN AIV.Talking <='60' THEN 1 ELSE 0 end as Less_than_1min
,CASE WHEN AIV.Talking between '61' and '300' THEN 1 ELSE 0 end as Between_1_and_5_min
,CASE WHEN AIV.Talking between '301' and '600' THEN 1 ELSE 0 end as Between_5_and_10_min
,CASE WHEN AIV.Talking >='601' THEN 1 ELSE 0 END as More_than_10min
From AgentInteractionsView as AIV WITH (NOLOCK)
WHere UserName in ('TomE','MicDe','JulCa')
and AIV.PSBeginTime > '2017-08-01'
and AIV.PSEndTime < '2017-09-01'
group by
convert (date,AIV.PSEndTime,102)
,AIV.Username
,AIV.FirstName+' '+AIV.LastName
,AIV.ITypeDisplayValue,AIV.DIDisplayValue
,convert (datetime,(DATEADD(hour,2,AIV.PSBeginTime)),120)
,convert (datetime,(DATEADD(hour,2,AIV.PSEndTime)),120)
,convert(CHAR(8),DATEADD(second,AIV.Talking,0),108)
,AIV.Talking
而且然而這實際工作我注意到,當柱「會說話」,所以我增加了一個新的是空它不會給我一個結果查詢:
,CASE WHEN AIV.Talking <='60' THEN 1 ELSE 0 end as Less_than_1min
,CASE WHEN AIV.Talking = null THEN 1 ELSE 0 end as Less_than_1min
希望這些會導致單個列,但當然它給了我2列具有相同的標題。
我想這兩個查詢連接成1列,例如
,CASE WHEN AIV.Talking = null THEN 1
ELSE (CASE WHEN AIV.Talking <='60' THEN 1 ELSE 0) end
as Less_than_1min
我思念的東西(顯然)還是我從SQL :)期待太多
你並不需要使用CASE來處理NULL值,有ISNULL和COALESCE。 - COALESCE(AIV.Talking,0)如果它是NULL將返回0而不是NULL,並不會打破你的邏輯,因爲它會少於60. – Leonidas199x
感謝我多麼希望Null單元顯示爲1在'Less_than_1min'colunm – Flaniganga
如果您正確配置它以返回所需內容,以便在您的案例表達式中進行比較,那麼這就是以上所述。 0 <= 60,所以會返回一個1.已經回答了,所以我可以給出更多的細節。 – Leonidas199x