2014-02-12 112 views
0

我試圖想出一個簡單的SQL語句,這將有助於什麼用戶需要輸出如何跳過行:如果其他行存在

SELECT 
    tbl, bundleID, productID, quantity, cardValue, a.title, orderLineGUID 
    FROM 
    (
    SELECT 'OLNOVPS' tbl, ol.orderLineGUID, ol.bundleID, 
      ol.productID, ol.quantity, ol.cardValue, m.title 
     from orderLinesNoVPS ol 
     inner JOIN productMeta m ON ol.productID = m.productID 
     where ol.orderID = 31687478 

    UNION ALL 

    SELECT 'OL' tbl, ol.orderLineGUID, ol.bundleID, 
      ol.productID, ol.quantity, ol.cardValue, m.title 
     from orderLines ol 
     inner JOIN productMeta m ON ol.productID = m.productID 
     where ol.orderID = 31687478 
) a 
    WHERE 
    a.productID > 100000; 

,其結果是:

enter image description here

我要完成只顯示了前兩排,爲OLNOVPS採取先例在OL什麼...

換句話說,如果OLNOVPS + orderLineGUID存在,那麼OL不應顯示,如果不存在的話,它應該是顯示OL,因爲沒有OLNOVPS先例

誰能給我一個手..我有點卡在這個部分。

+1

MySql,真的? –

+0

@TimSchmelter嘗試查看您在生產環境中使用MS SQL的許可證花了多少錢;) – balexandre

+0

@balexandra:這不是一個修辭問題,因爲IDE是SSMS,不是嗎? –

回答

0

這是有點難看,但它的工作...

您可以使用

IF (exists(SELECT 'OLNOVPS' tbl, ol.orderLineGUID, ol.bundleID, 
     ol.productID, ol.quantity, ol.cardValue, m.title 
    from orderLinesNoVPS ol 
    inner JOIN productMeta m ON ol.productID = m.productID 
    where ol.orderID = 31687478)) 
BEGIN 
    SELECT 'OLNOVPS' tbl, ol.orderLineGUID, ol.bundleID, 
     ol.productID, ol.quantity, ol.cardValue, m.title 
    from orderLinesNoVPS ol 
    inner JOIN productMeta m ON ol.productID = m.productID 
    where ol.orderID = 31687478 
END 
ELSE 
    SELECT 'OL' tbl, ol.orderLineGUID, ol.bundleID, 
     ol.productID, ol.quantity, ol.cardValue, m.title 
    from orderLines ol 
    inner JOIN productMeta m ON ol.productID = m.productID 
    where ol.orderID = 31687478 
END 
0

會是這樣的可能工作呢? (醜)

SELECT 
    case when min(tbl) = 1 then 'OLNOVPS' else 'OL' end as tbl, bundleID, productID, quantity, cardValue, a.title, orderLineGUID 
    FROM 
    (
    SELECT 1 tbl, ol.orderLineGUID, ol.bundleID, 
      ol.productID, ol.quantity, ol.cardValue, m.title 
     from orderLinesNoVPS ol 
     inner JOIN productMeta m ON ol.productID = m.productID 
     where ol.orderID = 31687478 

    UNION ALL 

    SELECT 2 tbl, ol.orderLineGUID, ol.bundleID, 
      ol.productID, ol.quantity, ol.cardValue, m.title 
     from orderLines ol 
     inner JOIN productMeta m ON ol.productID = m.productID 
     where ol.orderID = 31687478 
) a 
    WHERE 
    a.productID > 100000 
    GROUP BY 
    bundleID, productID, quantity, cardValue, a.title, orderLineGUID