我正在尝试编写一个查询来检索值或类似值的总计数。
我知道这应该是相当简单的,但我今天心不在焉。
例如,我的表格是这样的:
CustName: Acct #: FavColor:
Mr Johnson 12345 Red
Barry Johnson 86749 Dark Red
Mike Johnson 90462 Blue
Ms Smith 85693 Light Blue
该表在“FavColor”列中有多种颜色“红色”。那可能是“浅红色”,“暗红色”,“红色”等等。
我只需要知道喜欢任何“红色”阴影的顾客总数。
无论我如何编写这个简单的查询,计数仍然将每条记录分成一个单独的行,每行的计数为“1”。
所以,如果我运行以下查询:
Select
CustName, CustAcct, FavColor,
count(case when FavColor like '%Red%' then 1 end) AS [Total_Red],
count(case when FavColor like '%Blue%' then 1 end) AS [Total_Blue]
From
CustTable
Group by
CustName, CustAcct, FavColor
我得到以下结果:
CustName: Acct #: | FavColor: [Total_Red] [Total_Blue]
Mr Johnson 12345 Red 1
Barry Johnson 86749 Dark Red 1
Mike Johnson 90462 Blue 1
Ms Smith 85693 Light Blue 1
我需要结果将[Total_Red]
列值显示为“2”,因为有两位客户喜欢红色。
提前谢谢!
使用SQL Server 2012
答案 0 :(得分:1)
您的问题是分组。它正在被客户打破。如果您只需要颜色的总数,那么您可以运行类似下面的查询。这将返回喜欢每种颜色的总客户。
SELECT
SUM(CASE WHEN FavColor LIKE '%Red%' THEN 1 ELSE 0 END) AS 'Total_Red',
SUM(CASE WHEN FavColor LIKE '%Blue%' THEN 1 ELSE 0 END) AS 'Total_Blue'
FROM
CustTable
答案 1 :(得分:0)
;With cte
as
(
select
sum(case when FavColor like '%Red%' then 1 end) AS [Total_Red],
sum(case when FavColor like '%Blue%' then 1 end) AS [Total_Blue],
CustName, CustAcct
from
table t2
group by CustName, CustAcct
)
select
c.total_red,c.total_blue, t1.CustName, t1.CustAcct, t1.FavColor
from
cte t1
join
table t2
on
t1.CustName=t2.CustName
t2.CustAcct=t1.CustAcct