首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SSMS中组合Case语句

在SSMS中组合Case语句
EN

Stack Overflow用户
提问于 2012-10-18 14:16:11
回答 1查看 698关注 0票数 1

我需要创建一个报表,用户可以在来自Region > District> Committee> Events的数据之间进行切换。我使用的是无法更改的集合数据视图。我需要定义一个区域和一个区域,因为它们在数据库中没有正确定义,然后将它们相互关联。我已经接近了,因为我能够分配17个不同的"DistrictCodes"-是的,他们有代码,但没有正确的描述-使用CASE语句来组成区域:

代码语言:javascript
复制
CASE WHEN DistrictCode LIKE 'DST10%' THEN 4
WHEN DistrictCode LIKE 'DST13%' THEN 2
WHEN DistrictCode LIKE 'DST1%' THEN 2
WHEN DistrictCode LIKE 'DST2%' THEN 2
WHEN DistrictCode LIKE 'DST3%' THEN 3
WHEN DistrictCode LIKE 'DST5%' THEN 3
WHEN DistrictCode LIKE 'DST7%' THEN 2
WHEN DistrictCode LIKE 'DST8%' THEN 1
WHEN DistrictCode LIKE 'DSTC4%' THEN 3
WHEN DistrictCode LIKE 'DSTC6%' THEN 2
WHEN DistrictCode LIKE 'DSTC9%' THEN 1
WHEN DistrictCode LIKE 'DT11%' THEN 4
WHEN DistrictCode LIKE 'DT12%' THEN 4
WHEN DistrictCode LIKE 'DT15%' THEN 4
WHEN DistrictCode LIKE 'DT16%' THEN 4
WHEN DistrictCode LIKE 'DT17%' THEN 4
WHEN DistrictCode LIKE 'UP17%' THEN 4
WHEN DistrictCode LIKE 'UPL11%' THEN 4
ELSE 5
END AS Region

使用“地区描述”数据,我可以创建地区:

代码语言:javascript
复制
CASE WHEN DistrictDesc IN ('1' , '1A' , '1B') THEN 'District 1' 
    WHEN DistrictDesc IN ('2' , '2A' , '2B' , '2C') THEN 'District 2'
    WHEN DistrictDesc IN ('3' , '3A' , '3B') THEN 'District 3'
    WHEN DistrictDesc IN ('4' , '4A' , '4B' , '4C' , '4D' , '4E' , '4F') THEN 'District 4'
    WHEN DistrictDesc IN ('5' , '5A' , '5B' , '5C') THEN 'District 5'
    WHEN DistrictDesc IN ('6' , '6A') THEN 'District 6'
    WHEN DistrictDesc IN ('7' , '7A' , '7B') THEN 'District 7'
    WHEN DistrictDesc IN ('8' , '8A' , '8B' , '8C') THEN 'District 8'
    WHEN DistrictDesc IN ('9' , '9A') THEN 'District 9'
    WHEN DistrictDesc IN ('10' , '10A' , '10B' , '10C') THEN 'District 10'
    WHEN DistrictDesc IN ('11' , '11A' , '11B' , '11C') THEN 'District 11'
    WHEN DistrictDesc IN ('12' , '12A' , '12B' , '12C') THEN 'District 12'
    WHEN DistrictDesc IN ('13' , '13A') THEN 'District 13'
    WHEN DistrictDesc IN ('14' , '14A' , '14B' , '14C' , '14D') THEN 'District 14'
    WHEN DistrictDesc IN ('15' , '15A' , '15B' , '15C' , '15D') THEN 'District 15'
    WHEN DistrictDesc IN ('16' , '16A' , '16B' , '16C') THEN 'District 16'
    WHEN DistrictDesc IN ('17' , '17A' , '17B') THEN 'District 17'
    ELSE ISNULL (DistrictDesc,'No District')
    END AS District

这在SSMS中用于返回查询,但是当我在VS report Builder中预览报告时,我需要将Region设置为报告的参数。无论我是设置region的值,还是让它从查询中检索值,我都会在regions的预览下拉列表中得到1、2、3、4和5 (my regions)的倍数。

如何才能让它只返回1、2、3、4或5的一次?有没有一种方法可以把它们结合起来。如果我使用Distinct,那么我会丢失一些数据,不是吗?我尝试使用IN并列出每个地区代码,但返回相同的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-18 16:14:41

上面的代码是不可维护的。

您应该创建一个映射您的代码和描述的地区表,并连接到该表,并将其用作您的参数的来源。这将具有解决问题和改进查询的双重好处

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12948222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档