Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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脚本有什么问题?_Sql_Sql Server 2005 - Fatal编程技术网

这个sql脚本有什么问题?

这个sql脚本有什么问题?,sql,sql-server-2005,Sql,Sql Server 2005,我有列ID为USERSID的表用户 表: 我使用此查询从3个表中获取X DATE和USERSID的价格之和 declare @id int set @id = 3 -- for example SELECT SUM(priceA) as TA, SUM(priceB) as TB FROM t_A,t_B,t_C WHERE t_A.USERSID = @id AND t_B.USERSID = @id AND

我有列ID为USERSID的表用户 表:

我使用此查询从3个表中获取X DATE和USERSID的价格之和

    declare @id int 
    set @id = 3 -- for example 

    SELECT SUM(priceA) as TA, SUM(priceB) as TB
    FROM  t_A,t_B,t_C
    WHERE  t_A.USERSID =  @id
    AND     t_B.USERSID =  @id
    AND     t_C.USERSID =  @id
    AND    ADATE >= DATEADD(DAY, 0, DATEDIFF(DAY, 0, getdate())) 
   AND     BDATE >= DATEADD(DAY, 0, DATEDIFF(DAY, 0, getdate())) 
   AND    CDATE >= DATEADD(DAY, 0, DATEDIFF(DAY, 0, getdate())) 

只有当USERSID在三个表中有一行时,此脚本才能工作,否则脚本将不返回任何内容

您无法将日期列与日期差异进行比较。以下是您可以做的一些事情:

AND ADATE >= GETDATE()
或:


您可以检查语法,并且不能将日期列与datediff进行比较。以下是您可以做的一些事情:

AND ADATE >= GETDATE()
或:


您可以检查语法,我想这就是您需要的。这样,只要其中一个表满足以下条件,它就会返回结果:

SELECT SUM(priceA) as TA, SUM(priceB) as TB, SUM(priceC) as TC
    FROM  t_A
    FULL JOIN t_B
    FULL JOIN t_C
    WHERE  t_A.USERSID =  @id
    AND     t_B.USERSID =  @id
    AND     t_C.USERSID =  @id
    AND    ADATE >= DATEDIFF(d,0,dateadd(d,0,getdate()))
   AND     BDATE >= DATEDIFF(d,0,dateadd(d,0,getdate()))
   AND    CDATE >= DATEDIFF(d,0,dateadd(d,0,getdate()))

我想这就是你需要的。这样,只要其中一个表满足以下条件,它就会返回结果:

SELECT SUM(priceA) as TA, SUM(priceB) as TB, SUM(priceC) as TC
    FROM  t_A
    FULL JOIN t_B
    FULL JOIN t_C
    WHERE  t_A.USERSID =  @id
    AND     t_B.USERSID =  @id
    AND     t_C.USERSID =  @id
    AND    ADATE >= DATEDIFF(d,0,dateadd(d,0,getdate()))
   AND     BDATE >= DATEDIFF(d,0,dateadd(d,0,getdate()))
   AND    CDATE >= DATEDIFF(d,0,dateadd(d,0,getdate()))

因为如果只有一个表没有USERID=3,那么结果总是空的。解决方法:将选项与运算符一起使用


因为如果只有一个表没有USERID=3,那么结果总是空的。解决方法:将选项与运算符一起使用


它返回NULL是什么意思?SELECT语句中有三列。它是否会为所有这些返回NULL?其中一个?一个错误(这是我从上面的代码中所期望的)?您的前一个逗号不正确,因此根据您的表结构,
price c
似乎不是一个问题。将更正它,只是错过了输入…只有当USERSID在三个表中有一行时,这个脚本才能工作,否则脚本返回Nothing它返回NULL是什么意思?SELECT语句中有三列。它是否会为所有这些返回NULL?其中一个?一个错误(这是我从上面的代码中所期望的)?您的前面有一个逗号,它是不正确的。因此根据您的表结构,
price c
似乎不是一件事。如果要更正它,只需错过键入…只有当USERSID在三个表中有一行时,此脚本才能工作,否则脚本将不返回任何内容
DECLARE @id int 
SET @id = 3
SELECT SUM(x.priceA) as TA, SUM(x.priceB) AS TB
FROM (
      SELECT priceA, priceB
      FROM t_A 
      WHERE t_A.USERSID =  @id
        AND ADATE >= DATEDIFF(d,0,dateadd(d,0,getdate()))
      UNION ALL
      SELECT priceA, priceB
      FROM t_B 
      WHERE t_B.USERSID =  @id
        AND BDATE >= DATEDIFF(d,0,dateadd(d,0,getdate()))
      UNION ALL   
      SELECT priceA, priceB
      FROM t_C 
      WHERE t_C.USERSID =  @id
        AND CDATE >= DATEDIFF(d,0,dateadd(d,0,getdate()))
      ) x