2011-10-02 106 views
0

這是什麼表看起來像。如何乘以不同行和不同列的值?

Code  Items  Unit QTY Price Total 
------- --------- ---- ---- ----- ----- 
HTM001 Cable Tie pcs null 1.00 ? 
HTM001s Cable Tie null 20 null 

,我嘗試這樣的查詢...

SELECT VRIJ1 FROM dbo.INVELE WHERE FK_BODEFINITOIN_USERDEFINED IN (894) AS QTY, 
SELECT RESTWRDE FROM dbo.INVELE WHERE FK_BODEFINITOIN_USERDEFINED IN (898) AS PRICE, 
(QTY*PRICE) AS TOTAL 
FROM dbo.INVELE 

然後我得到了這些:

Msg 156, Level 15, State 1, Line 4 
Incorrect syntax near the keyword 'AS'. 
Msg 156, Level 15, State 1, Line 5 
Incorrect syntax near the keyword 'AS'. 

我想是這樣子20*1.00=Total

任何人請幫忙!!!

+0

您的問題令人難以置信的寬泛。你想要增加哪些項目?你想要輸出看起來像什麼?你有什麼嘗試? –

+0

你應該考慮清理你的數據。這兩行看起來應該合併(從而消除您的問題)。 – Mat

+0

嗨保羅,對不起,我是全新的SQL。僅僅2個月,現在我開始學習它。我想用「HTMOO1s」代碼將行「QTY」列上的值乘以HTMOO1s代碼的行上的值乘以「Price」列中的值,值爲1.00。因此,20 * 1.00,我想把答案放在「總計」欄中。 – NeOnSql

回答

0
;WITH T1(QTY, CODE) AS 
(
    SELECT VRIJ1, LEFT(CODE, 7) 
    FROM dbo.INVELE 
    WHERE FK_BODEFINITION_USERDEFINED IN (894) 
), 
T2(PRICE, CODE) AS 
(
    SELECT RESTWRDE, CODE 
    FROM dbo.INVELE 
    WHERE FK_BODEFINITION_USERDEFINED IN (898) 
) 
SELECT T1.QTY, 
     T2.PRICE, 
     T1.QTY*T2.PRICE AS TOTAL 
FROM T1 
    INNER JOIN T2 
    ON T1.CODE = T2.CODE 
+0

謝謝!有用!但我注意到它提供了很多行......它給出了229441行。它應該只有479行...我認爲發生的事情是它也乘以所有行...(479 * 479)= 229441行。 – NeOnSql

+0

@NeOnSql - 是的,當使用交叉連接和你的'where'語句返回多行時,這是可以預料的。你需要一個字段來加入你的行,所以你可以使用'inner join'而不是'cross join'。如果你可以使用'INVELE'的表結構來更新你的問題,那麼這將會非常有用,並帶有一些示例數據和預期的輸出。 –

+0

這是INVELE的副本[鏈接](http://www.sendspace.com/file/hf5iwx) – NeOnSql