Tsql CRM-具有“不兼容”值组合的查询记录(SQL、SSR)

Tsql CRM-具有“不兼容”值组合的查询记录(SQL、SSR),tsql,reporting-services,dynamics-crm,dynamics-crm-2011,crm,Tsql,Reporting Services,Dynamics Crm,Dynamics Crm 2011,Crm,我在CRM环境中有一个记录类型,其中有两个查找。某些值组合无效,但系统中没有阻止该输入的约束。为了举例说明,我将使用一个城市和州的小样本来解释 在CRM之外,我有一个电子表格来显示哪些城市和州的组合是可以的,哪些是不可以的;例如,波士顿是马萨诸塞州的一个城市,但不是明尼苏达州、德克萨斯州或威斯康星州的一个城市。然而,阿灵顿是所有四个州的一个城市,等等: 问题是没有什么能阻止人们把剑桥作为城市,把德克萨斯作为州。我希望以某种方式使用此电子表格的数据作为输入,并结合SQL查询来创建SSRS报告,该报

我在CRM环境中有一个记录类型,其中有两个查找。某些值组合无效,但系统中没有阻止该输入的约束。为了举例说明,我将使用一个城市和州的小样本来解释

在CRM之外,我有一个电子表格来显示哪些城市和州的组合是可以的,哪些是不可以的;例如,波士顿是马萨诸塞州的一个城市,但不是明尼苏达州、德克萨斯州或威斯康星州的一个城市。然而,阿灵顿是所有四个州的一个城市,等等:

问题是没有什么能阻止人们把剑桥作为城市,把德克萨斯作为州。我希望以某种方式使用此电子表格的数据作为输入,并结合SQL查询来创建SSRS报告,该报告将显示具有不兼容组合的记录:

SELECT name, city, state
FROM contacts
WHERE [magic for the query to know there's no Cambridge in Texas, etc.]
我可以在查询本身中将每种组合定义为有效或无效,但有些东西告诉我,有一种更有效的方法来实现这一点,而不是定义我拥有的几百种可能的组合


我正在配置字段,以便强制输入有效项,但我需要识别并清理现有项。

您需要一个有效组合表。如果您还没有,那么您需要创建一个。最简单的形式是

CREATE TABLE CityState(City varchar(50), State varchar(2))

INSERT INTO CityState VALUES
('Boston', 'MA'),
('Arlington', 'MN'),
('Arlington', 'MA'),
('Arlington', 'TX'),
('Arlington', 'WI')
SELECT c.name, c.city, c.state,
       CASE s.City WHEN NULL THEN 0 ELSE 1 END AS IsValid
    FROM contacts c
        LEFT JOIN CityState s ON c.city = s.City AND c.state = s.State
等等

一旦你有了这个,你的查询将是

CREATE TABLE CityState(City varchar(50), State varchar(2))

INSERT INTO CityState VALUES
('Boston', 'MA'),
('Arlington', 'MN'),
('Arlington', 'MA'),
('Arlington', 'TX'),
('Arlington', 'WI')
SELECT c.name, c.city, c.state,
       CASE s.City WHEN NULL THEN 0 ELSE 1 END AS IsValid
    FROM contacts c
        LEFT JOIN CityState s ON c.city = s.City AND c.state = s.State

您可以创建一个包含字段名、城市和州的引用表。相应地填充它们交叉引用为Y的位置。您将得到一个包含19行数据的表

在主数据集中使用此表链接城市名称并修改查询,即: 选择名称、城市、州
从contacts.city=reference_table.city上的contacts内部连接参考_table.Ah,好的-我理解。我可以使用Excel非常轻松地将现有表转换为您在其中描述的值,因此创建表应该不会太糟糕。然后我是否会在查询结束时删除该引用表?除了SELECT语句之外,我从来没有做过任何查询,所以我不完全确定它是如何工作的。没关系——我想没有理由不把表留在那里,根据需要更新它,对吧?然后将SELECT语句作为单独的脚本保存在一起。再次感谢-我会考虑这个答案!这是正确的。我会创建表格并保存它。这样的引用表在我的数据库中占很大一部分,需要验证规则。