我对SQL非常陌生,但是Excel已经变得太慢,无法继续使用,所以我正在尝试SQLiteStudio。我希望在查询中创建一个列,显示随时间运行的总数(特征为计划点,通过项目运行时标记每个百分比)。Complete标记一个位置是否已经完成安装(Y/NULL),并且只用于从进一步的计算中筛选出不完整的位置。
我现在有
With cte as(
Select [Location]
,[HW/NonHW]
,[Obligation/Actual]
,[Schedule Point]
,[CY20$]
,[Vendor Name]
,[Vendor Zip Code]
,[Complete]
,[System Rollup (Import)]
,IIf([Complete] = "Y", [CY20$], 0) As [Completed Costs]
FROM data)
Select [Location]
,[HW/NonHW]
,[Obligation/Actual]
,[Schedule Point]
,[CY20$]
,[Vendor Name]
,[Vendor Zip Code]
,[Complete]
,[System Rollup (Import)]
,[Completed Costs]
,SUM([Completed Costs]) OVER (PARTITION BY [Obligation/Actual], [Normalized Schedule Location 1%],[System Rollup (Import)], [HW/NonHW]) As [CY20$ Summed]
FROM cte此时,我想做的不是每个调度点的和,而是所有以前的调度点(即Excel语句中的<=操作符)。
作为参考,以下是我试图复制的总结:
=SUMIFS($N$2:$N$541790,$AU$2:$AU$541790,"Y",$AQ$2:$AQ$541790,AQ2,$AI$2:$AI$541790,AI2,$AH$2:$AH$541790,AH2,$AJ$2:$AJ$541790, "<=" & AJ2)N是CY20$,AU是Complete,AQ是System,AI是Obligation/Actual,AH是HW/NonHW,AJ是调度点。
任何帮助都将不胜感激!
发布于 2022-04-12 17:06:34
与SUMIFS等价的是SUM和CASE-WHEN在SQL中的组合。
摘要示例:
SELECT
SUM(
CASE
WHEN <condition1> AND <condition2> AND <condition3> THEN 1
ELSE 0
END
)
FROM yourtable在上面,condition1、condition2和condition3是逻辑表达式,<和>只是通知您那里有一个表达式,它不是语法的一部分。这也是不必要的,有确切的三个条件,你可以有多少你喜欢。此外,没有必要使用AND作为运算符,您可以根据自己的喜好构造自己的表达式。我使用AND操作符的原因是,根据您使用SUMIFS这一事实,您可能会有一个分离。
一个更具体的例子:
CREATE TABLE person(
number int,
name text,
age int
);
INSERT INTO person(number, name, age)
VALUES(1, 'Joe', 12);
INSERT INTO person(number, name, age)
VALUES(2, 'Jane' 12);
INSERT INTO person(number, name, age)
VALUES(3, 'Robert', 16);
INSERT INTO person(number, name, age)
VALUES(4, 'Roberta', 15);
INSERT INTO person(number, name, age)
VALUES(5, 'Blian', 18);
INSERT INTO person(number, name, age)
VALUES(6, 'Bigusdqs', 19);
SELECT
SUM(
CASE
WHEN age <= 16 AND name <> 'Joe' THEN 1
ELSE 0
END
) AS MySUMIFS
FROM person;编辑
如果我们想知道有多少人的年龄比现在的人小,那么我们可以加入:
SELECT
SUM(
CASE
WHEN p2.age <= p1.age THEN 1
ELSE 0
END
) AS MySUMIFS, name
FROM person p1
JOIN person p2
ON p1.name <> p2.name
GROUP BY p1.name;EDIT2
基于上面描述的思想创建了一个Fiddle,您可以在3.27&fiddle=3cb0232e5d669071a3aa5bb1df68dbca上找到它
小提琴里的密码:
CREATE TABLE person(
number int,
name text,
age int
);
INSERT INTO person(number, name, age)
VALUES(1, 'Joe', 12);
INSERT INTO person(number, name, age)
VALUES(2, 'Jane' 12);
INSERT INTO person(number, name, age)
VALUES(3, 'Robert', 16);
INSERT INTO person(number, name, age)
VALUES(4, 'Roberta', 15);
INSERT INTO person(number, name, age)
VALUES(5, 'Blian', 18);
INSERT INTO person(number, name, age)
VALUES(6, 'Bigusdqs', 19);
SELECT
SUM(
CASE
WHEN p2.age <= p1.age THEN 1
ELSE 0
END
) AS MySUMIFS, p1.name
FROM person p1
JOIN person p2
ON p1.name <> p2.name
GROUP BY p1.name;

https://stackoverflow.com/questions/71846361
复制相似问题