Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server-can';如果不创建视图,就不能指望DATEDIFF_Sql Server_Sql Server 2005 Express - Fatal编程技术网

Sql server SQL Server-can';如果不创建视图,就不能指望DATEDIFF

Sql server SQL Server-can';如果不创建视图,就不能指望DATEDIFF,sql-server,sql-server-2005-express,Sql Server,Sql Server 2005 Express,我试图获得一些关于两个日期的差异以及这种差异发生的频率的信息。我可以使用: 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'

我试图获得一些关于两个日期的差异以及这种差异发生的频率的信息。我可以使用:

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中没有创建视图的权限,因此我考虑使用嵌套语句,如:

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
但我一直收到错误Msgs 207和208

请告诉我我做错了什么。我一直在搜索和尝试各种方法,但到目前为止,我所能想到的是,我需要为“db1.dbo.t1 JOIN db2.dbo.t2”提供一个别名,这样我就可以用:

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

谢谢,

我想-虽然我不能快速测试:

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

在SQLServer2005及更高版本上,还可以使用CTE(CommonTableExpress)

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(*)