这个sql脚本有什么问题?
我有列ID为USERSID的表用户 表: 我使用此查询从3个表中获取X DATE和USERSID的价格之和这个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
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