我有两张表格如下:
tblTransaction
tblMobileRegistration
我想加入这两个表,并计算特定列值的原始数量,而不是' 1'如下:
SELECT COUNT(Transaction_MobileErrorCode) FROM T1 WHERE Transaction_MobileErrorCode <> ''
我的整个查询:
SELECT
T1.*,
T2.*,
(SELECT COUNT(Transaction_MobileErrorCode) FROM T1 WHERE Transaction_MobileErrorCode <> '')
FROM
(SELECT MobileRegistration_DateTime, Transaction_MobileErrorCode FROM tblTransaction, tblMobileRegistration
WHERE T1.ID1 = T2.ID1 AND
T1.ID2 = '111111' AND
T1.ID3 = '222222' AND
T1.ID4 = '333333' AND
T1.ID5 = '444444') AS T1,
tblMobileRegistration AS T2
但是我收到了这个错误:
Invalid object name 'T1'.
所以我该如何解决? 谢谢你的帮助...
答案 0 :(得分:1)
要说出你真正想要的结果有点难。但是以下可能会做你想做的事情:
SELECT MobileRegistration_DateTime, Transaction_MobileErrorCode,
SUM(CASE WHENTransaction_MobileErrorCode <> '' THEN 1 ELSE 0 END) OVER ()
FROM tblTransaction t JOIN
tblMobileRegistration mr
ON t.ID1 = mr.ID1
WHERE T1.ID2 = '111111' AND
T1.ID3 = '222222' AND
T1.ID4 = '333333' AND
T1.ID5 = '444444';
您应该学会使用正确的,明确的join
语法。您只需要有太多的表引用来处理您可能想要做的事情。
此版本使用窗口功能。您没有指定数据库,但这是大多数数据库支持的ANSI标准语法。
答案 1 :(得分:1)
这是你最内心的疑问。没有别名为T1(或T2)。您要么混合括号,要么丢失别名。如果你错过了别名,你真的需要比在任何地方使用t1和t2更有创意。调试查询非常困难。
SELECT MobileRegistration_DateTime,
Transaction_MobileErrorCode
FROM tblTransaction,
tblMobileRegistration
WHERE T1.ID1 = T2.ID1 AND
T1.ID2 = '111111' AND
T1.ID3 = '222222' AND
T1.ID4 = '333333' AND
T1.ID5 = '444444'
正如其他人所说,你的查询非常混乱。如果你真的打算拥有所有派生表,那么将其分解并从内到外构建它。
答案 2 :(得分:0)
这是一个运行时错误。
首先,它将从表中检查select语句中的所有列,但不检查已分配的表(T1将在执行时创建并在执行后删除) 删除那个select语句(从t1开始)然后执行它将起作用。
(SELECT COUNT(Transaction_MobileErrorCode) FROM T1)
从这一行你得到错误