我是新来的,希望我能在这里找到一些帮助。
我有以下问题:Fiddle SQL Demo
CREATE TABLE TestData
(
[Acct] INT ,
[Desc] VARCHAR(100) ,
[OU01] VARCHAR(100) ,
[OU02] VARCHAR(100) ,
DEPTHS INT
);
CREATE TABLE TestDepends
(
[Acct] INT ,
[SecondKey] NUMERIC(9, 0) ,
[Name] VARCHAR(100) ,
[COST] NUMERIC(9, 0) ,
[used] TINYINT ,
[OU01] VARCHAR(100) ,
[OU02] VARCHAR(100)
);
INSERT INTO TestData
VALUES ( 1, 'Feld 1', 'OU01', '', 1 );
INSERT INTO TestData
VALUES ( 1, 'Feld 1', 'OU01', 'OU02', 2 );
INSERT INTO TestData
VALUES ( 1, 'Feld 1', 'OU01', 'OU03', 2 );
INSERT INTO TestData
VALUES ( 1, 'Feld 1', 'OU02', '', 1 );
INSERT INTO TestDepends
VALUES ( 1, 21, 'Name 1', 120, 0, 'OU01', 'OU02' );
INSERT INTO TestDepends
VALUES ( 1, 22, 'Name 2', 50, 0, 'OU01', '' );
INSERT INTO TestDepends
VALUES ( 1, 21, 'Name 1', 120, 1, 'OU01', 'OU02' );
INSERT INTO TestDepends
VALUES ( 1, 23, 'Name 3', 111, 0, 'OU01', 'OU03' );
INSERT INTO TestDepends
VALUES ( 1, 24, 'Name 4', 99, 0, 'OU02', '' );
INSERT INTO TestDepends
VALUES ( 1, 25, 'Name 5', 120, 0, 'OU01', 'OU02' );
SELECT TD.Acct ,
COUNT(DISTINCT TDS.SecondKey) AS Found ,
COUNT(DISTINCT CASE WHEN TDS.Used = 1 THEN TDS.SecondKey
END) AS Used ,
TD.OU01 ,
TD.OU02
FROM TestData TD
INNER JOIN TestDepends TDS ON TDS.Acct = TD.Acct
AND ( TD.OU01 = ''
OR ISNULL(TD.OU01, '') = ISNULL(TDS.OU01, '')
)
AND ( TD.OU02 = ''
OR ISNULL(TD.OU02, '') = ISNULL(TDS.OU02, '')
)
WHERE TD.depths = 2
GROUP BY TD.Acct ,
TD.OU01 ,
TD.OU02
正如您在第一个 Select 中看到的那样,我计算了不同的数据(SecondKey),这非常有效。
现在我想总结所有不同数据的所有成本
SELECT TD.Acct ,
SUM(TDS.Cost) AS Cost ,
SUM(TDS.Cost) AS Cost ,
TD.OU01 ,
TD.OU02
FROM TestData TD
INNER JOIN TestDepends TDS ON TDS.Acct = TD.Acct
AND ( TD.OU01 = ''
OR ISNULL(TD.OU01, '') = ISNULL(TDS.OU01, '')
)
AND ( TD.OU02 = ''
OR ISNULL(TD.OU02, '') = ISNULL(TDS.OU02, '')
)
WHERE TD.depths = 2
GROUP BY TD.Acct ,
TD.OU01 ,
TD.OU02
正如您所看到的,它也总结了“重复”(不是整行是重复,而是 SecondKeys)行。是否可以总结仅不同 SecondKeys 的所有成本?
提前致谢。
最佳答案
如果我猜对了,你需要加入而不是 TestDepends
但查询 GROUP BY
避免重复:
....
FROM TestData TD
INNER JOIN
(
SELECT Acct,
SecondKey,
Name,
cost,
MAX(used) as used,
OU01,
OU02
FROM
TestDepends
GROUP BY Acct,SecondKey,Name,cost, OU01, OU02
)
TDS ON ....
SQL Fiddle demo
关于sql - 如何对重复字段的不同值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22062771/