您可以使用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')
嘗試SUM(CASE WHEN Statusid = 1 THEN 1 ELSE 0)伯爵要算零和三三兩兩相同。如果你總結它,它應該工作。我希望。沒有測試。 – SteveB