模糊错误c#/ sql

时间:2012-07-12 13:01:44

标签: c# sql-server

有人可以告诉我为什么我的代码出错了吗?

 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);

3 个答案:

答案 0 :(得分:1)

在子查询中指定inv_amt列来自哪里(是invoice.inv_amt还是invasionset.inv_amt)

答案 1 :(得分:1)

  

ambigous column name inv_amt

这两个表invassetInvoice都包含列inv_amt,你必须将它引用到内部SELECT语句中的别名,类似于:invoice.inv_amtinvasset.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?很明显,你引用了两个拥有它的表。由于您引用的唯一表格是invassetInvoice,因此很明显这两个表都有一个名为inv_amt的列。您必须在查询中指定所需的那个。

所以而不是:

`inv_amt AS total`

你想要的东西是:

`invasset.inv_amt AS total`

(假设这是你想要的表,否则使用另一个表。)

相关问题