2017-06-28 4 views
1

mssqlで2つのテーブルをマージしたいと思います。最初のテーブルにはタスク列があります。私は特定のタスクを数え、カウント結果をAuftNrの2番目のテーブルに与えたいと思います。MSSQLのサブクエリでカウントを使用する方法

ここ

enter image description here

は、私はこれを解決することにより、サブクエリやグループが必要ですか?

これまでのところこれを行っています。私が正しくあなたの質問を理解していれば

SELECT AB.PersNr as PersonalNumber 

     ,CONVERT(char(10),DATEADD(DAY, AB.Tag, '30.12.1899'),126) AS Day 
     ,CONVERT(char(10),DATEADD(SECOND, AB.Von, DATEADD(DAY, AB.Tag, 
    '30.12.1899')),108) AS [From] 
     ,AB.Bis as [To] 
     ,AB.Auftrag as Task 
    FROM AStpVonBis AB 
    LEFT JOIN Auftrag A ON (A.AuftNr = AB.Auftrag) 
    INNER JOIN Personen P ON (P.PersNr = AB.PersNr) 
    WHERE P.Abteilung = 170 AND AB.Tag = DATEDIFF(DAY, '30.12.1899', GETDATE()) 
    AND AB.Bis = -2 


    SELECT A.AuftNr FROM Auftrag A 
+2

でテストは、テーブルとすべての条件を使用して期待された結果の両方からのサンプルデータを共有してください。 –

答えて

1

を動作するはずです:

SELECT 
AB.Auftrag as Task, 
count(*) as Total 
FROM AStpVonBis AB 
JOIN Personen P ON (P.PersNr = AB.PersNr) 
WHERE P.Abteilung = 170 
AND AB.Tag = DATEDIFF(DAY, convert(date,'30.12.1899',104), GETDATE()) 
AND AB.Bis = -2 
GROUP BY AB.Auftrag 
ORDER BY AB.Auftrag 

[Auftrag]を使用した左結合は含まれていなかったことに注意してください。
既にグループ化するAB.Auftragがあり、タスクの名前にグループ化は必要ありません。

日付の日付スタンプはconverted with the 104 formatです。
他のデフォルトの日付形式を使用する接続でも機能します。

免責事項:唯一のメモ帳

+0

素晴らしいです。 –

+0

@GregOstry聞いてよかったです。カウント0でタスクを取得する必要があるかどうかはわかりませんでした。その場合は、[Auftrag]やその他の変更に対して追加のRIGHT JOINが必要です。しかし、私はあなたがそれを必要としなかったと思います。 – LukStorms

0

、怒鳴るクエリはそれを行う必要がありGROUP BYとCOUNTを使用して

DECLARE @Count TABLE (PhoneNumver INT, [Day] DATE,[From] VARCHAR(150),[To] VARCHAR(3),Task INT) 
INSERT INTO @Count 
VALUES(1003,'2017-06-28','07:46:20','-2',150), 
     (1010,'2017-06-28','11:44:47','-2',140), 
     (1012,'2017-06-28','10:57:00','-2',120), 
     (1016,'2017-06-28','12:20:16','-2',120), 
     (1019,'2017-06-28','08:31:03','-2',120), 
     (1020,'2017-06-28','11:38:02','-2',120), 
     (1021,'2017-06-28','07:54:55','-2',120), 
     (1025,'2017-06-28','11:38:12','-2',120), 
     (1027,'2017-06-28','09:47:46','-2',130) 

DECLARE @Task TABLE (AuftNr INT) 
INSERT INTO @Task VALUES (110),(120),(130),(140),(150),(200),(210),(220),(230) 


SELECT 
A.AuftNr, 
COUNT(C.Task) AS Total_Count 
FROM @Task A 
LEFT JOIN @Count C ON A.AuftNr=C.Task 

--From here you can add all the exclussions in where clause 
GROUP BY A.AuftNr 
ORDER BY Total_Count DESC 

OUTPUT

AuftNr Total_Count 
120   6 
130   1 
140   1 
150   1 
200   0 
210   0 
220   0 
230   0 
110   0 
関連する問題