Sql 一列中字符值的总和
我需要在一列中计算不同的值。它是Char数据类型。我在oracle中编写了代码,但无法更改SQL server中的语法 这项工作:Sql 一列中字符值的总和,sql,sql-server,oracle,Sql,Sql Server,Oracle,我需要在一列中计算不同的值。它是Char数据类型。我在oracle中编写了代码,但无法更改SQL server中的语法 这项工作: Select l.name, l.address, SUM(DECODE(L.SEX, 'M', 1, 0)) MALE_TOTAL, SUM(DECODE(L.SEX, 'F', 1, 0)) FEMALE_TOTAL, SUM(DECODE(L.SEX, 'U', 1, 0)) UNK
Select l.name, l.address,
SUM(DECODE(L.SEX, 'M', 1, 0)) MALE_TOTAL,
SUM(DECODE(L.SEX, 'F', 1, 0)) FEMALE_TOTAL,
SUM(DECODE(L.SEX, 'U', 1, 0)) UNKNOWN_TOTAL
From personnel
非常感谢您可以使用IIF 2012+
或案例
SELECT
SUM(case when L.SEX = 'M' then 1 else 0 end)) MALE_TOTAL,
SUM(case when L.SEX = 'F' then 1 else 0 end) FEMALE_TOTAL,
SUM(case when L.SEX = 'U' then 1 else 0 end) UNKNOWN_TOTAL
FROM personnel
您想要的SQL标准方法是:
Select l.name, l.address,
SUM(CASE WHEN L.SEX = 'M' THEN 1 ELSE 0 END) MALE_TOTAL,
SUM(CASE WHEN L.SEX = 'F' THEN 1 ELSE 0 END) FEMALE_TOTAL,
SUM(CASE WHEN L.SEX = 'U' THEN 1 ELSE 0 END) UNKNOWN_TOTAL
From personnel
group by l.name, l.address;
注意分组依据
。如果您想要每个名称/地址一行,那么您需要这个。否则,从选择中删除列:
Select SUM(CASE WHEN L.SEX = 'M' THEN 1 ELSE 0 END) MALE_TOTAL,
SUM(CASE WHEN L.SEX = 'F' THEN 1 ELSE 0 END) FEMALE_TOTAL,
SUM(CASE WHEN L.SEX = 'U' THEN 1 ELSE 0 END) UNKNOWN_TOTAL
From personnel;
这是mysql还是sql server?您使用的是什么数据库?它看起来既不是SQL Server,也不是MySQL。他选择的是SQL Server。我使用的是SQL Server 12.0。我尝试了IFF-它说不是一个可识别的函数。我尝试了案例解决方案,它说列无效,它既不包含在聚合函数中,也不包含在GROUPBY子句中。谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!
Select SUM(CASE WHEN L.SEX = 'M' THEN 1 ELSE 0 END) MALE_TOTAL,
SUM(CASE WHEN L.SEX = 'F' THEN 1 ELSE 0 END) FEMALE_TOTAL,
SUM(CASE WHEN L.SEX = 'U' THEN 1 ELSE 0 END) UNKNOWN_TOTAL
From personnel;