1

2 つの日付の違いと、その違いが発生する頻度に関する情報を取得しようとしています。使うことができます:

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'

そして、次のように返されます。

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 

ありがとう、

4

2 に答える 2

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
于 2009-11-28T11:10:25.283 に答える
1

SQL Server 2005 以降では、CTE (Common Table Express) も使用できます。

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 は、次のステートメントに対してのみ有効な「その場でのビュー」のようなものです。

それはあなたのために働きますか?

于 2009-11-28T12:29:27.297 に答える