我有一个表[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]记录过滤到一个单独的记录条目中,但这超出了我的技能.
你可以使用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)