SQL(条件未应用于一列)

时间:2014-05-25 17:12:18

标签: sql sql-server conditional-statements

此查询有一个问题,除了FOR列
它显示了这个库存中的多个值,在相应条件下它应该只显示一个值'7',这将取决于该值将设置coulmn值,但现在因为它显示所有值,它会导致过多的重复和其他问题 这里是查询:

SELECT        T0.ItemCode, T0.ItemName, T0.CardCode, T0.CodeBars, T0.U_VEN_CODE, T2.UgpCode, T3.AltQty, T3.BaseQty, CASE WHEN T4.Uomentry = - 1 THEN T0.[BuyUnitMsr] ELSE t4.UomName END AS 'UoMName', 
                         T4.UomEntry, T0.U_CAT_CODE, T0.U_CAT_NAME, T1.CardName,
                             (SELECT        TOP (1) PDN1.U_AC_QTY_ORDER
                               FROM            PDN1 INNER JOIN
                                                         OPDN ON PDN1.DocEntry = OPDN.DocEntry
                               WHERE        (PDN1.ItemCode = T0.ItemCode) AND (OPDN.CardCode = T0.CardCode)
                               ORDER BY OPDN.DocDate DESC) AS OQuantity,
                             (SELECT        TOP (1) PDN1_1.U_AC_QTY_BONUS
                               FROM            PDN1 AS PDN1_1 INNER JOIN
                                                         OPDN AS OPDN_1 ON PDN1_1.DocEntry = OPDN_1.DocEntry
                               WHERE        (PDN1_1.ItemCode = T0.ItemCode) AND (OPDN_1.CardCode = T0.CardCode)
                               ORDER BY OPDN_1.DocDate DESC) AS BQuantity, ITM1_1.Price, T0.U_DISC_PER, SMMU01.WhsCode, SMMU01.OnHand, SMAB01.WhsCode AS Expr1, SMAB01.OnHand AS Expr2, 
                         SMKH01.WhsCode AS Expr3, SMKH01.OnHand AS Expr4, ITM9.PriceList, ITM9.Price AS Expr5, ITM1.PriceList AS Expr6, ITM1.Price AS Expr7
FROM            OITM AS T0 INNER JOIN
                         OCRD AS T1 ON T0.CardCode = T1.CardCode INNER JOIN
                         OUGP AS T2 ON T0.UgpEntry = T2.UgpEntry INNER JOIN
                         UGP1 AS T3 ON T2.UgpEntry = T3.UgpEntry INNER JOIN
                         OITW AS SMMU01 ON T0.ItemCode = SMMU01.ItemCode INNER JOIN
                         OITW AS SMAB01 ON SMMU01.ItemCode = SMAB01.ItemCode INNER JOIN
                         OITW AS SMKH01 ON SMAB01.ItemCode = SMKH01.ItemCode INNER JOIN
                         ITM9 ON T0.ItemCode = ITM9.ItemCode AND ITM9.PriceList = '7' INNER JOIN
                         ITM1 ON T0.ItemCode = ITM1.ItemCode LEFT OUTER JOIN
                         ITM1 AS ITM1_1 ON T0.ItemCode = ITM1_1.ItemCode AND ITM1_1.PriceList = '10' LEFT OUTER JOIN
                         OUOM AS T4 ON T3.UomEntry = T4.UomEntry
WHERE        (T0.Series = '65') AND (T4.UomEntry = 3 OR
                         T4.UomEntry = '-1') AND (SMMU01.WhsCode = 'W-SMMU01') AND (SMAB01.WhsCode = 'W-SMAB01') AND (SMKH01.WhsCode = 'W-SMKH01')

这是coulmn的结果

Expr6
1
2
3
4
5
6
7
8
9
10

如何才能让条件中只显示“7”? THX

1 个答案:

答案 0 :(得分:0)

SELECT  [...]
    , ITM1.PriceList AS Expr6
    , ITM1.Price AS Expr7
FROM   
    OITM AS T0 
    INNER JOIN OCRD AS T1 
        ON T0.CardCode = T1.CardCode 
    INNER JOIN OUGP AS T2 
        ON T0.UgpEntry = T2.UgpEntry 
    INNER JOIN UGP1 AS T3 
        ON T2.UgpEntry = T3.UgpEntry 
    INNER JOIN OITW AS SMMU01 
        ON T0.ItemCode = SMMU01.ItemCode 
    INNER JOIN OITW AS SMAB01 
        ON SMMU01.ItemCode = SMAB01.ItemCode 
    INNER JOIN OITW AS SMKH01 
        ON SMAB01.ItemCode = SMKH01.ItemCode 
    INNER JOIN ITM9 
        ON T0.ItemCode = ITM9.ItemCode 
        AND ITM9.PriceList = '7' 
    INNER JOIN ITM1 
        ON T0.ItemCode = ITM1.ItemCode 
    LEFT OUTER JOIN ITM1 AS ITM1_1 
        ON T0.ItemCode = ITM1_1.ItemCode 
        AND ITM1_1.PriceList = '10' 
    LEFT OUTER JOIN OUOM AS T4 
        ON T3.UomEntry = T4.UomEntry

您的INNER JOIN ITM1没有PriceList = '7'过滤器

您应该可以通过以下方式修复它:

INNER JOIN ITM1 
    ON T0.ItemCode = ITM1.ItemCode 
    AND ITM1.PriceList = '7' 

现在的问题是:ITM1和ITM9为何重复?