2012-07-12 53 views
-4

有人可以告訴我爲什麼我得到這個代碼錯誤?Ambigous錯誤c#/ sql

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

什麼是那個錯誤?請張貼它。 – 2012-07-12 13:03:45

+0

除非你告訴我們什麼是錯誤_is_。此外,格式化您的代碼實際上是可讀的。當代碼可讀時,更容易發現代碼中的問題。 – David 2012-07-12 13:04:01

+0

ambigous列名inv_amt – 2012-07-12 13:05:35

回答

1

在其中inv_amt柱從未來子查詢specifiy(是invoice.inv_amt或invasset.inv_amt)

+0

即時消息不缺少從表中,因爲這是一個子查詢 – 2012-07-12 13:09:05

+0

我知道你不會錯過「從」表。在子查詢中,在選擇列表中,您具有列表inv_amt,該列在表invoice和invasset中具有相同名稱,您必須指定是指invoice.inv_amt還是invasset.inv_amt,將「inv_amt」替換爲「invoice.inv_amt」或「 invasset.inv_amt」。 – 2012-07-12 13:12:36

1

ambigous列名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 
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` 

(假設這是你想要的表,否則使用其他表。)