有人可以告诉我为什么我的代码出错了吗?
SqlCommand scGetClaimedDetails = new SqlCommand(
"SELECT SUM(isclaimable) as claimable, SUM(isclaimed) as claimed,SUM(total) as total from" +
" ( SELECT CASE WHEN claimed = 'Y' THEN inv_amt *.45 END as isclaimed, (inv_amt *.45) as inclaimable, inv_amt as total from invasset" +
" INNER JOIN Invoice ON invoice.invoice = invasset.invoice WHERE invasset.asset_no = @AssetNumber ) as D2", DataAccess.AssetConnection);
答案 0 :(得分:1)
在子查询中指定inv_amt列来自哪里(是invoice.inv_amt还是invasionset.inv_amt)
答案 1 :(得分:1)
ambigous column name inv_amt
这两个表invasset
和Invoice
都包含列inv_amt
,你必须将它引用到内部SELECT
语句中的别名,类似于:invoice.inv_amt
或invasset.inv_amt
:
SELECT SUM(isclaimable) as claimable, SUM(isclaimed) as claimed,
SUM(total) as total
FROM
(
SELECT CASE WHEN claimed = 'Y' THEN invoice.inv_amt *.45 END as isclaimed,
(inv_amt *.45) as inclaimable, inv_amt as total
from invasset INNER JOIN Invoice ON invoice.invoice = invasset.invoice
WHERE invasset.asset_no = @AssetNumber
) as D2
答案 2 :(得分:0)
当我将代码格式化为人类可读时...
SqlCommand scGetClaimedDetails = new SqlCommand(
"SELECT
SUM(isclaimable) AS claimable,
SUM(isclaimed) AS claimed,
SUM(total) AS total
FROM
(SELECT
CASE WHEN claimed = 'Y' THEN inv_amt *.45 END AS isclaimed,
(inv_amt *.45) AS inclaimable,
inv_amt AS total
FROM
invasset
INNER JOIN Invoice ON invoice.invoice = invasset.invoice
WHERE
invasset.asset_no = @AssetNumber) AS D2",
DataAccess.AssetConnection);
我不禁注意到,您的外部SELECT
正在寻找名为isclaimable
的列,而您的内部SELECT
正在返回名为inclaimable
的列。你的代码中有一个拼写错误。
修改:针对您对问题的评论,哪些表格包含字段inv_amt
?很明显,你引用了两个拥有它的表。由于您引用的唯一表格是invasset
和Invoice
,因此很明显这两个表都有一个名为inv_amt
的列。您必须在查询中指定所需的那个。
所以而不是:
`inv_amt AS total`
你想要的东西是:
`invasset.inv_amt AS total`
(假设这是你想要的表,否则使用另一个表。)