2009-11-28 2 views
1

두 날짜의 차이점과 그 차이점에 대한 정보를 얻으 려합니다.SQL Server - CREATE VIEW를 수행하지 않고 DATEDIFF에서 COUNT를 수행 할 수 없습니다.

SELECT 
    DATEDIFF (day, db1.dbo.t1.Date1, db2.dbo.t2.Date2) AS Days 
FROM 
    db1.dbo.t1 
JOIN 
    db2.dbo.t2 ON db1.dbo.t1.wID = db2.dbo.t2.cID 
       AND db1.dbo.t1.Action LIKE 'Standard' 
       AND db2.dbo.t2.Status = 'CLOSED' 

그리고 그것은 반환합니다 : I 사용할 수

Days 
----- 
4 
4 
8 
21 
16 
42 
... 

가 지금은 그 시절의 개수를 얻을 수있다, 뭔가 같은 : 나는 권한이없는

Days Diff 
----- ----- 
0  100 
1  40 
2  22 
3  25 
... 

DB에서 CREATE VIEW와 같이 중첩 된 구문을 생각해 보았습니다.

SELECT 
    Days, COUNT (*) AS Diff 
FROM 
    Days 
WHERE EXISTS 
(
SELECT DATEDIFF (day, db1.dbo.t1.Date1, db2.dbo.t2.Date2) AS Days 
FROM db1.dbo.t1 JOIN db2.dbo.t2 
ON db1.dbo.t1.wID = db2.dbo.t2.cID 
AND db1.dbo.t1.Action LIKE 'Standard' 
AND db2.dbo.t2.Status = 'CLOSED' 
) 
GROUP BY Days 

하지만 메시지 207과 208의 오류가 계속 발생합니다!

내가 뭘 잘못하고 있는지 말해주십시오. 나는 다양한 것을 시도해 왔지만 지금까지 내가 생각할 수있는 것은 어떻게 든 'db1.dbo.t1 JOIN db2.dbo.t2'에 별명을 주어야하기 때문에 다음과 같이 호출 할 수있다 :

SELECT Days, COUNT (*) AS Diff 
FROM new_dual_db_alias 
WHERE EXISTS 

덕분에,

답변

1

생각 - 나는 신속하게 테스트 할 수있는 위치에 모르겠지만 : 최대

SELECT Days, COUNT(Days) FROM 
(
SELECT 
    DATEDIFF (day, db1.dbo.t1.Date1, db2.dbo.t2.Date2) AS Days 
FROM 
    db1.dbo.t1 JOIN db2.dbo.t2 ON db1.dbo.t1.wID = db2.dbo.t2.cID AND 
            db1.dbo.t1.Action LIKE 'Standard' AND 
            db2.dbo.t2.Status = 'CLOSED' 
) 
GROUP BY Days 
1
SQL 서버 2005

하고, 당신은 또한 CTE (공통 테이블 익스프레스)를 사용할 수

WITH DateDiffDays AS 
(
    SELECT 
    DATEDIFF (day, db1.dbo.t1.Date1, db2.dbo.t2.Date2) AS Days 
    FROM 
    db1.dbo.t1 
    JOIN 
    db2.dbo.t2 ON db1.dbo.t1.wID = db2.dbo.t2.cID 
    WHERE 
    db1.dbo.t1.Action LIKE 'Standard' 
    AND db2.dbo.t2.Status = 'CLOSED' 
) 
SELECT Days, COUNT(*) 
FROM DateDiffDays 
GROUP BY Days 
ORDER BY COUNT(*) 

CTE는 "바로보기 (view on the fly)"와 같은 것으로 다음 문장에만 유효합니다.

그게 효과가 있습니까?