2014-03-13 38 views
1

我有一個表,如下我怎樣才能顯示結果兩次同一列不同的條件

Campaign  Status 
A    InProgress 
B    NotStarted 
A    NotStarted    
C    NotStarted 
A    NotStarted 
B    InProgress 
A    NotStarted 
C    InProgress 

我需要得到像

Campaign InProgress NotStarted 
    A  1   2 
    B  1   1 
    C  1   1 

我在這裏試圖在計數狀態條件和顯示爲不同的字段 這可能嗎? 我用下面的查詢

select Campaign, Count(Case when Statusid=1 then StatusId else 0 end) as NotStarted, Count(Case when Statusid=2 then StatusId else 0 end) as InProgress FROM [TLDCRM2].[dbo].[vPipeline] 
group by Campaign 

這是不允許的情況下語句中的不同領域的嘗試

請幫忙提前顯示上述 感謝

+0

嘗試SUM(CASE WHEN Statusid = 1 THEN 1 ELSE 0)伯爵要算零和三三兩兩相同。如果你總結它,它應該工作。我希望。沒有測試。 – SteveB

回答

0

多個選項:

select Campaign, 
    Count(Case when Statusid=1 then StatusId else NULL end) as NotStarted, 
    Count(Case when Statusid=2 then StatusId else NULL end) as InProgress 
    FROM [TLDCRM2].[dbo].[vPipeline] 
group by Campaign 

select Campaign, 
    Sum(Case when Statusid=1 then 1 else 0 end) as NotStarted, 
    Sum(Case when Statusid=2 then 1 else 0 end) as InProgress 
    FROM [TLDCRM2].[dbo].[vPipeline] 
    group by Campaign 
0

查詢中存在一些語法錯誤。

試試這個:

select 
    Campaign, 
    SUM(Case Status when 'InProgress' then 1 else 0 end) as InProgress, 
    SUM(Case Status when 'NotStarted' then 1 else 0 end) as NotStarted 
FROM [vPipeline] 
group by Campaign; 

SQL小提琴here

1

你可以做這樣的

SELECT Campaign, 
     InProgress = SUM(CASE Status WHEN 'InProgress' THEN 1 ELSE 0 END), 
     NotStarted = SUM(CASE Status WHEN 'NotStarted' THEN 1 ELSE 0 END) 
    FROM YourTable 
GROUP BY Campaign 

或者你應該看看PIVOT。

1

您可以使用PIVOT功能來實現此結果。

SELECT * 
FROM 
(
SELECT 
[Campaign] AS Campaign, -- grouping column 
[Campaign] AS DupCampaign, -- grouping column 
[Status] -- spreading column 
FROM vPipeline 
) AS Data 
PIVOT(
COUNT([DupCampaign]) 
FOR [Status] 
IN ([InProgress], [NotStarted]) 
) AS PIV 

我發的SQL創建該表和它的行 -

USE [Stackoverflow] 
GO 

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_PADDING ON 
GO 
CREATE TABLE [dbo].[vPipeline](
    [Id] [int] NULL, 
    [Campaign] [varchar](1) NULL, 
    [Status] [varchar](50) NULL 
) ON [PRIMARY] 
GO 
SET ANSI_PADDING OFF 
GO 
INSERT [dbo].[vPipeline] ([Id], [Campaign], [Status]) VALUES (1, N'A', N'InProgress') 
INSERT [dbo].[vPipeline] ([Id], [Campaign], [Status]) VALUES (2, N'B', N'NotStarted') 
INSERT [dbo].[vPipeline] ([Id], [Campaign], [Status]) VALUES (3, N'A', N'NotStarted') 
INSERT [dbo].[vPipeline] ([Id], [Campaign], [Status]) VALUES (4, N'C', N'NotStarted') 
INSERT [dbo].[vPipeline] ([Id], [Campaign], [Status]) VALUES (5, N'A', N'NotStarted') 
INSERT [dbo].[vPipeline] ([Id], [Campaign], [Status]) VALUES (6, N'B', N'InProgress') 
INSERT [dbo].[vPipeline] ([Id], [Campaign], [Status]) VALUES (7, N'A', N'NotStarted') 
INSERT [dbo].[vPipeline] ([Id], [Campaign], [Status]) VALUES (8, N'C', N'InProgress') 
+0

海報 - 你從事電子營銷嗎? – HappyCoder

+0

+1用於計算PIVOT,它總是讓我感到困惑=) – deroby

相關問題