相关疑难解决方法(0)

Sql Server相当于COUNTIF聚合函数

我正在构建一个带有GROUP BY子句的查询,该子句需要能够仅根据某个条件计算记录(例如,只计算某个列值等于1的记录).

SELECT  UID, 
        COUNT(UID) AS TotalRecords, 
        SUM(ContractDollars) AS ContractDollars,
        (COUNTIF(MyColumn, 1) / COUNT(UID) * 100) -- Get the average of all records that are 1
FROM    dbo.AD_CurrentView
GROUP BY UID
HAVING  SUM(ContractDollars) >= 500000
Run Code Online (Sandbox Code Playgroud)

COUNTIF()行明显失败,因为没有调用本机SQL函数COUNTIF,但这里的想法是确定MyColumn值为"1"的所有行的百分比.

有关如何在MS SQL 2005环境中正确实现它的任何想法?

sql sql-server-2005

152
推荐指数
4
解决办法
33万
查看次数

使用多个聚合列和多个where子句编写查询的最佳方法是什么

我有一张桌子tbl_LEDGER

+-----------+--------+-----+
| AccountId | GlCode | Amt |
+-----------+--------+-----+
| LAS00001  | INTRAC | 100 |
| LAS00002  | INTRAC | 150 |
| LAS00001  | INTLAS | 200 |
+-----------+--------+-----+
Run Code Online (Sandbox Code Playgroud)

期望的结果:

+-----------+------------+-----------+
| AccountId | intractamt | intlasAmt |
+-----------+------------+-----------+
| LAS00001  |        100 |       200 |
| LAS00002  |        150 |         0 |
+-----------+------------+-----------+
Run Code Online (Sandbox Code Playgroud)

这是我的工作查询:

select accountid,sum(amt) intracamt,  (select SUM(amt)  from tbl_LEDGER 
where   GLCode='intlas' and AccountID=intrac.AccountID ) intlasamt 
from tbl_LEDGER intrac 
where GLCode='intrac'    group by AccountID …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

2
推荐指数
1
解决办法
115
查看次数

标签 统计

sql ×2

sql-server ×1

sql-server-2005 ×1

t-sql ×1