0

これは私のSQLステートメントです:

SELECT repnr, DATEDIFF(day, MIN(start), MAX(start) +1) AS DaysTotal
FROM TBLstatus 
WHERE status IN (1, 2, 3, 4, 8, 11, 20, 7, 23)
GROUP BY repnr HAVING COUNT(*) = 2 AND MAX(Start) > GETDATE()-30

Select repnr as repnr, CONVERT(float, SUM(DATEDIFF(day, start, slut))) as extern
From TBLstatus 
where status IN (5, 15, 17)
group by repnr

最初のものはこのデータを返します:

repnr daystotal
1000  100
1001  90
1003  91

および2番目のステートメント:

repnr extern
900   100
901   102
1000  21
1003  23

私が欲しいのは、repnr(ID)が一致する場所で、toの値を引いて、次のようにすることです。

repnr result
1000  79
1003  68

MSSQLでこれを行うにはどうすればよいですか。

4

3 に答える 3

1
SELECT q1.repnr, q1.daystotal - q2.extern as [result]
FROM
(
SELECT repnr, DATEDIFF(day, MIN(start), MAX(start) +1) AS DaysTotal
FROM TBLstatus 
WHERE status IN (1, 2, 3, 4, 8, 11, 20, 7, 23)
GROUP BY repnr HAVING COUNT(*) = 2 AND MAX(Start) > GETDATE()-30
)q1
INNER JOIN 
(
Select repnr as repnr, CONVERT(float, SUM(DATEDIFF(day, start, slut))) as extern
From TBLstatus 
where status IN (5, 15, 17)
group by repnr
)q2 ON q1.repnr = q2.repnr
于 2013-01-29T14:22:59.007 に答える
1

クエリをサブクエリとして設定し、キーに参加してください。

select repnr, DaysTotal - extern as result from (SELECT repnr, DATEDIFF(day, MIN(start), MAX(start) +1) AS DaysTotal
FROM TBLstatus 
WHERE status IN (1, 2, 3, 4, 8, 11, 20, 7, 23)
GROUP BY repnr HAVING COUNT(*) = 2 AND MAX(Start) > GETDATE()-30) a inner join (Select repnr as repnr, CONVERT(float, SUM(DATEDIFF(day, start, slut))) as extern
From TBLstatus 
where status IN (5, 15, 17)
group by repnr) b on a.repnr = b.repnr
于 2013-01-29T14:26:59.347 に答える
0
SELECT a.repnr, ABS(A.daystotal - b.extern) AS result
FROM(
SELECT repnr, DATEDIFF(day, MIN(start), MAX(start) +1) AS DaysTotal
FROM TBLstatus 
WHERE status IN (1, 2, 3, 4, 8, 11, 20, 7, 23)
GROUP BY repnr HAVING COUNT(*) = 2 AND MAX(Start) > GETDATE()-30
)A
JOIN(
Select repnr as repnr, CONVERT(float, SUM(DATEDIFF(day, start, slut))) as extern
From TBLstatus 
where status IN (5, 15, 17)
group by repnr
)B
ON A.repnr = b.repnr
于 2013-01-29T14:24:04.317 に答える