2014-03-13 41 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

相关问题