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