2012-10-25 161 views
0

這是我當前的SQL查詢。我需要修改這個以下sql查詢需要幫助

SELECT 
    18 BrokerDealerID, 
    5 PortfolioID, 
    PeriodEndDate DATE, 
    SecurityIdentifier_All.SecurityId, 
    MAX(
    (CASE 
     WHEN Securities.Quantity < 0 THEN 
     100 + (100 - LocalPriceAmount) 
     ELSE 
     LocalPriceAmount 
    END 
     ) /100) Mark 
FROM 
    Fireball_Reporting..StateStreet_DailyPosition_Second StateStreet 
INNER JOIN 
    Fireball_Reporting..SecurityIdentifier_All ON StateStreet.CUSIP = SecurityIdentifier_All.Identifier 
INNER JOIN 
    Fireball..TradeBySecurityType Securities ON 
     Securities.PricingSecurityID = SecurityIdentifier_All.SecurityId AND Securities.Position = 1 AND 
(CASE WHEN StateStreet.SecurityName LIKE '% R V %' THEN StateStreet.SharesParValue * -1 ELSE StateStreet.SharesParValue END) = Securities.Quantity 
WHERE 
    CONVERT(DATETIME, StateStreet.PeriodEndDate) = '2012-10-23' [email protected] 
GROUP BY 
    PeriodEndDate, 
    SecurityIdentifier_All.SecurityId 

我需要做的變化在第二條件即

(CASE WHEN StateStreet.SecurityName LIKE '% R V %' THEN StateStreet.SharesParValue * -1 ELSE StateStreet.SharesParValue END) = Securities.Quantity 

我給你舉個例子。

我選擇查詢給我下面的輸出

securityname date  securityid portfolioid type mark    quantity 
------------ ---------- ---------- ----------- ---- ------------------ ------------- 
R V DISH  10/23/2012 4879505 5   CDS 1.0487189900000000 -5000000.0000 
R V DISH  10/23/2012 4879505 5   CDS 1.0487189900000000 -2000000.0000 
R F DISH 10/23/2012 4879505 5   CDS 0.9512810100000000 3000000.0000 

這裏它上面給我3個紀錄爲同樣的安全ID 當我執行合併上述使用導致它僅服用1日直接記錄,如果我不檢查這檢查那Quantity第二條件,但現在我只想檢查 當在StateStreet.SecurityName LIKE「%RV%」來自其數量以上的結果,可以採取記錄是-如果沒有的話需要其數量ID的記錄+

我怎麼能改變那個案例陳述?或直接檢查% R V%在我計算標記的選擇語句? 需要技術幫助。 我是SQL新手。

+0

我想擺在WHERE子句 '(CASE WHEN StateStreet.SecurityName LIKE '%RV%',那麼StateStreet.SharesParValue * -1 ELSE StateStreet.SharesParValue END)' 但得到的錯誤這種情況下聲明: 表達式在'GROUP'附近預期條件的上下文中指定的非布爾型類型。 – Neo

+0

我對你的陳述感到困惑,「......我只需要確保StateStreet.SharesParValue是正面的還是負面的。」SQL Server中的數字怎麼可能不是正面或負面?你是說你需要知道它是正面還是負面? –

+0

@AbeMiessler我需要知道來自其他表的StateStreet.SharesParValue是'-1000'或'1000',因爲依賴於'-'和'+'我需要計算'Mark',因爲我正在合併這些選擇其他表格的值,請幫助我 – Neo

回答

1

也許是這樣的:

(
     (StateStreet.SecurityName LIKE '% R V %' AND Securities.Quantity < 0) 
    OR (StateStreet.SecurityName NOT LIKE '% R V %' AND Securities.Quantity >= 0) 
) 

我只是猜測其中有 「=」 號(+可能包括0)。

+0

更正的問題簡要說明plz幫我 – Neo

+1

我也改變了我的表情。 – GilM

+0

我有點困惑,我需要把條件放在select語句中,我正在計算標記還是在where子句中? – Neo