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 MSSQL查询错误_Sql Server_Sql Server 2008_Stored Procedures - Fatal编程技术网

Sql server MSSQL查询错误

Sql server MSSQL查询错误,sql-server,sql-server-2008,stored-procedures,Sql Server,Sql Server 2008,Stored Procedures,我想从两个表中访问数据,其中数据是按小时计算的。我正在使用UNIONQUERY处理这个问题,如下所示 ( SELECT T.unit1,t.CurrentDate,t.CurrentTime,loc,Unit2,value,Description FROM fore T WHERE loc=@loc AND CurrentDateTIME =@c0 AND quan='CO' AND NOT EXISTS( SELECT 1 FROM audit WHERE startdate<

我想从两个表中访问数据,其中数据是按小时计算的。我正在使用UNIONQUERY处理这个问题,如下所示

( SELECT T.unit1,t.CurrentDate,t.CurrentTime,loc,Unit2,value,Description FROM fore T  WHERE   loc=@loc AND CurrentDateTIME =@c0 AND quan='CO'  
AND NOT EXISTS( SELECT 1 FROM audit WHERE  startdate<=CAST(@c0dt AS DATE) AND StartTime<=CAST(@c0dt AS TIME) AND (ENDDATE >= CAST(@c0dt AS DATE) OR EndDate IS NULL )
AND (ENDTIME>=CAST(@c0dt AS TIME) OR enDtime IS NULL ) AND loc=@loc AND unit1='CO')

UNION 

SELECT TOP 1 T.unit1,t.CurrentDate,t.CurrentTime,loc,'' as Unit2 ,CAST(VALUE AS SMALLINT) value ,Description FROM  audit T WHERE startdate<=CAST(getdate() AS DATE) 
AND StartTime <= CAST(CURRENT_TIMESTAMP AS TIME)AND (enddate>=getdate()  OR ENDDATE IS NOT NULL )   AND (endTime>=CAST(GETDATE() AS TIME) OR enDtime IS NULL) 
AND loc=@loc AND unit1='CO')
表3:

currentdate     currenttime     loc     unit1   unit2   concern     value   description currentdatetime
2015-08-19      15:00:00        B1      C0      m       .1700       5       Good        2015-08-19 15:00:00.000
2015-08-19      16:00:00        B1      C0      m       14.7000     35      Good        2015-08-19 16:00:00.000
2015-08-19      17:00:00        B1      C0      m       6.5600      7       Good        2015-08-19 17:00:00.000
2015-08-19      19:00:00        B1      C0      m       19.6000     20      Good        2015-08-19 19:00:00.000
以上两个表的说明如下:表中:Fore由小时转储数据组成,表中:audit由用户修改日期组成,如果该小时的数据不可用,则用户手动输入数据


我想写一个union,它应该以我从前端得到的c0dt@c0dt datetime获取数据。所以问题是,当我运行上述查询时,我无法从手动输入的审计表中获取数据。

使用这些数据和查询,我认为您不会得到任何结果。在开始日期之前有一个结束日期


PS:您有一个独特的设计,为同一事物冗余了日期、时间和日期时间字段。

只是好奇这是否有效:我记得在某个地方读到,与TOP的联合在MSSQL中不起作用。。。我在找那篇文章。认为它与top工作所需的order by有关,但order by只能在两个数据集的并集上定义。。。一种解决方法是使用CTE或内联视图。。。这就是为什么我问这个CTE例子是否有效

WITH A AS ( SELECT 
    T.unit1
    ,t.CurrentDate
    ,t.CurrentTime
    ,loc
    ,Unit2
    ,value
    ,Description 
  FROM fore T  
  WHERE   loc=@loc 
  AND     CurrentDateTIME =@c0 
  AND quan='CO'  
  AND NOT EXISTS(   SELECT 1 
                    FROM audit 
                    WHERE  startdate<=CAST(@c0dt AS DATE) 
                    AND StartTime<=CAST(@c0dt AS TIME) 
                    AND (ENDDATE >= CAST(@c0dt AS DATE) 
                         OR EndDate IS NULL )
                    AND (ENDTIME>=CAST(@c0dt AS TIME) 
                         OR enDtime IS NULL ) 
                    AND loc=@loc 
                    AND unit1='CO'),
B as (SELECT TOP 1 
    T.unit1
    ,t.CurrentDate
    ,t.CurrentTime
    ,loc
    ,'' as Unit2 
    ,CAST(VALUE AS SMALLINT) value 
    ,Description 
  FROM  audit T 
  WHERE startdate<=CAST(getdate() AS DATE) 
  AND StartTime <= CAST(CURRENT_TIMESTAMP AS TIME)
  AND (enddate>=getdate()  
       OR ENDDATE IS NOT NULL ) 
  AND (endTime>=CAST(GETDATE() AS TIME) 
       OR enDtime IS NULL) 
  AND loc=@loc 
  AND unit1='CO'))
SELECT * from A
UNION ALL
SELECT * FROM B;

你能举一个你得到的输出的例子吗?添加了我得到的和我需要的输出多么有意义的标题!我看到你已经编辑了你的问题。我不明白你怎么会用这个问题得到这样的结果。您的数据与此处显示的数据不同,或者您正在使用不同的查询。数据相同,查询也相同。在本例中,审核表从前端应用程序获取数据,并以此格式保存日期。
WITH A AS ( SELECT 
    T.unit1
    ,t.CurrentDate
    ,t.CurrentTime
    ,loc
    ,Unit2
    ,value
    ,Description 
  FROM fore T  
  WHERE   loc=@loc 
  AND     CurrentDateTIME =@c0 
  AND quan='CO'  
  AND NOT EXISTS(   SELECT 1 
                    FROM audit 
                    WHERE  startdate<=CAST(@c0dt AS DATE) 
                    AND StartTime<=CAST(@c0dt AS TIME) 
                    AND (ENDDATE >= CAST(@c0dt AS DATE) 
                         OR EndDate IS NULL )
                    AND (ENDTIME>=CAST(@c0dt AS TIME) 
                         OR enDtime IS NULL ) 
                    AND loc=@loc 
                    AND unit1='CO'),
B as (SELECT TOP 1 
    T.unit1
    ,t.CurrentDate
    ,t.CurrentTime
    ,loc
    ,'' as Unit2 
    ,CAST(VALUE AS SMALLINT) value 
    ,Description 
  FROM  audit T 
  WHERE startdate<=CAST(getdate() AS DATE) 
  AND StartTime <= CAST(CURRENT_TIMESTAMP AS TIME)
  AND (enddate>=getdate()  
       OR ENDDATE IS NOT NULL ) 
  AND (endTime>=CAST(GETDATE() AS TIME) 
       OR enDtime IS NULL) 
  AND loc=@loc 
  AND unit1='CO'))
SELECT * from A
UNION ALL
SELECT * FROM B;