苦苦挣扎的SQL Where过滤器

Mat*_*hew 2 sql sql-server

我有一个表[Customer],它有[postcode]和[totalValue]字段.

我需要设计一个查询,返回所有[postcode]的前两个字符,然后是该特定邮政编码组的[totalValue]的SUM(因此NW,L1等各有一个值).

我有这个代码,运行正常:

SELECT LEFT(postcode, 2), SUM(totalValue)
  FROM Customer
  GROUP BY LEFT(postcode, 2)
Run Code Online (Sandbox Code Playgroud)

...但是我在[客户]中的条目不包含有效的[邮政编码].

有效的英国邮政编码总是一个或两个字母后跟一个数字(例如LE1,L12等).

我想将所有不正确/空/ Null [postcode]记录过滤到一个单独的记录条目中,但这超出了我的技能.

Gor*_*off 5

你可以使用LIKE:

where postcode like '[A-Z][A-Z0-9][0-9]%'
Run Code Online (Sandbox Code Playgroud)

您可能还想检查长度和其他特征,但这可以回答您的具体问题.

编辑:

如需单独输入,请使用case:

SELECT (CASE WHEN postcode like '[A-Z][A-Z0-9][0-9]%'
             THEN LEFT(postcode, 2)
             ELSE 'Separate Entry'
        END) as PostCode2, SUM(totalValue)
FROM Customer
GROUP BY (CASE WHEN postcode like '[A-Z][A-Z0-9][0-9]%'
               THEN LEFT(postcode, 2)
               ELSE 'Separate Entry'
          END);
Run Code Online (Sandbox Code Playgroud)