Iam新的在这里,并希望我可以在这里找到一些帮助。如何总结重复字段的不同值
我有以下问题: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
正如你可以在第一选择看,我数着不同的数据(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的成本?
在此先感谢。
感谢您的帮助。这工作:)现在我将尝试消除可怕的OU结构。目前在每个OU的当前SQL过程中,sql被复制...(此时为8 OU)我相信它必须可以使其无需复制粘贴:) – WhoisIt