2014-01-14 115 views
0

我在創建臨時表時遇到了回合函數的問題。 (嗯,我認爲這是問題無論如何)MySQL回合和子查詢

下面列表中的「EntryGauge」列需要根據數據庫中的另一個值(不同的表格)進行縮放和舍入。

有2個查詢,我想我可以用作子查詢來檢索比例因子和舍入精度值。當我嘗試使用它們(如下圖所示的查詢)出現此錯誤:

「SQL錯誤(1166):不正確的列名稱ROUND(EntryGauge *(SELECT DisplayScaleFactor FROM webreportparametersetup WHERE MachineIdent = 'MAC' 「

我不知道是什麼問題,或者如果我使用子查詢正常,但我真的可以使用一些幫助

DROP TEMPORARY TABLE IF EXISTS LiveFeed; 
CREATE TEMPORARY TABLE LiveFeed AS 
(
SELECT 
    MachineIdent, 
    CoilID, 
    DATE_FORMAT(StartTime, '%b %d %Y %h:%i %p'), 
    DATE_FORMAT(EndTime, '%b %d %Y %h:%i %p'), 
    TIMEDIFF(EndTime, StartTime), 
    Alloy, 
    ROUND(EntryGauge * (SELECT DisplayScaleFactor FROM webreportparametersetup WHERE MachineIdent = 'MachineIdent' AND ItemName = 'EntryGauge'), (SELECT DisplayPrecision FROM webreportparametersetup WHERE MachineIdent = 'MachineIdent' AND ItemName = 'EntryGauge')), 
    ExitGauge, 
    EntryWidth, 
    ExitWidth, 
    CoilDiameter, 
    CoilLength 
FROM Coil 
    INNER JOIN CoilPass 
    ON Coil.CoilIdent=CoilPass.CoilIdent 
    INNER JOIN PassSection 
    ON CoilPass.PassIdent=PassSection.PassIdent 
WHERE PassSection.SectionIdent IN('7965','7966','7967') 
); 

編輯:只是要清楚什麼計算器重刑需要看上去像:

回合(EntryGauge *比例因子,RoundingPrecision)

+0

1.列是否真的存在? 2.嘗試在使用後命名該列。 'ROUND(EntryGauge *(SELECT DisplayScaleFactor FROM webreportparametersetup WHERE MachineIdent ='MachineIdent'AND ItemName ='EntryGauge'),(SELECT DisplayPrecision FROM webreportparametersetup WHERE MachineIdent ='MachineIdent'AND ItemName ='EntryGauge'))AS EntryGagesRounded,' –

+0

您能在ROUND函數分隔符中運行子查詢,以確認它們是正確的? –

+0

謝謝,這解決了主要問題! –

回答

0

也許你的問題只是忘了給圓角列一個名字? 加入給你一個更好的概述:

DROP TEMPORARY TABLE IF EXISTS LiveFeed; 
CREATE TEMPORARY TABLE LiveFeed AS 
(
SELECT 
    MachineIdent, 
    CoilID, 
    DATE_FORMAT(StartTime, '%b %d %Y %h:%i %p'), 
    DATE_FORMAT(EndTime, '%b %d %Y %h:%i %p'), 
    TIMEDIFF(EndTime, StartTime), 
    Alloy, 
    ROUND(EntryGauge * webreportparametersetup.DisplayScaleFactor,webreportparametersetup.DisplayPrecision) as RoundedValue, 
    ExitGauge, 
    EntryWidth, 
    ExitWidth, 
    CoilDiameter, 
    CoilLength 
FROM Coil 
    INNER JOIN CoilPass 
    ON Coil.CoilIdent=CoilPass.CoilIdent 
    INNER JOIN PassSection 
    ON CoilPass.PassIdent=PassSection.PassIdent 
    LEFT JOIN webreportparametersetup 
    ON MachineIdent = 'MachineIdent' AND ItemName = 'EntryGauge' 
WHERE PassSection.SectionIdent IN('7965','7966','7967') 
); 
+0

謝謝!這確定了主要問題。我只是想知道,在我引用MachineIdent的部分(在左連接中)是否有某種語法來使用當前正在檢索的記錄是什麼?有點像MachineIdent = @MachineIdent? (比例因子等在「機器相關」的基礎上。) –

0

試試這個請:

ROUND(EntryGauge * (SELECT DisplayScaleFactor 
FROM webreportparametersetup WHERE MachineIdent = 'MachineIdent' 
AND ItemName = 'EntryGauge'),2), ROUND((SELECT DisplayPrecision 
FROM webreportparametersetup WHERE MachineIdent = 'MachineIdent' 
AND ItemName = 'EntryGauge'),2) 

我認爲這是用括號

+0

感謝您的回覆,但舍入計算需要採用以下格式:_Round(EntryGauge * ScaleFactor,RoundingPrecision)_因此,第二個子查詢需要放在您將「2」放入循環函數的位置,因爲它代表數。 –