写入的SQL查询不显示预期的输出

时间:2017-08-04 09:52:21

标签: sql sql-server sql-server-2012

我在下面写了一些查询,将输出显示如下(页面底部),但这不符合预期。

注意:表A中的代码和描述始终是固定的(将来会添加更多代码),唯一的百分比会有所不同,数据是由uniquecode提取的,而某些唯一代码没有百分比和有些人。

以下查询未满足我的要求,当Code没有任何百分比值时,它也是Code,应该显示描述,百分比列显示为该代码为NULL。

SELECT a.Code,
       a.Description ,
       b.Percentage,
FROM TableA a
     LEFT OUTER JOIN TableB b ON a.Code = b.Code
WHERE a.Code IN('CIC', 'CIA', 'DAC', 'PIB', 'UTI', 'DAB')
     AND (b.UniqueCode = 'A100');

请参阅下表,

Table A
---------------------------
Code    Description 
---------------------------
CIC     AAAABBBCC
CIA     HHHHAAAAA
DAC     HHHIIIIIH
PIB     BBEEERERE
UTI     GGGGGGGGGG
DAC     CCSASASAAS
BVB     HHHAAAAAAA
BBC     KKKIIIIWWW
ABC     BBMMMMAMAA

Table B:
--------------------------------
Code    Percentage  UniqueCode
--------------------------------
CIC                   A100
CIA       80          A100
DAC                   A100
PIB       100         A100
UTI       100         A100
DAB       70          A100
CIC       100         A101
CIA       80          A101
DAC                   A101
PIB       100         A101
UTI       100         A101
DAB                   A101

预期的输出

    --------------------------------
    Code    Description  Percentage
    --------------------------------
    CIC     AAAABBBCC     NULL
    CIA     HHHHAAAAA     80
    DAC     HHHIIIIIH     NULL
    PIB     BBEEERERE     100
    UTI     GGGGGGGGG     100
    DAB     CCSASASAA     100

1 个答案:

答案 0 :(得分:0)

您在where子句中的表b中包含了一个过滤器,这有效地强制了内连接。将其移至连接条件应该可以解决您的问题。

SELECT a.Code,
       a.Description ,
       b.Percentage,
FROM TableA a
     LEFT OUTER JOIN TableB b ON a.Code = b.Code AND (b.UniqueCode = 'A100')
WHERE a.Code IN('CIC', 'CIA', 'DAC', 'PIB', 'UTI', 'DAB');