Sql 从关系中获取错误数据
我有两张桌子: 设计组表:Sql 从关系中获取错误数据,sql,tsql,Sql,Tsql,我有两张桌子: 设计组表: +--------------------------------------+--------+ | DesignGroupId | Name | +--------------------------------------+--------+ | 9D32C543-24EA-497E-918E-387C8A66BF1A | Group1 | | 532C543E-24EA-497E-918E-387C8A66BF
+--------------------------------------+--------+
| DesignGroupId | Name |
+--------------------------------------+--------+
| 9D32C543-24EA-497E-918E-387C8A66BF1A | Group1 |
| 532C543E-24EA-497E-918E-387C8A66BF1A | Group2 |
+--------------------------------------+--------+
设计表:
+-----------+---------------+--------------------------------------+
| DesignKey | Name | DesignGroupId |
+-----------+---------------+--------------------------------------+
| 1 | Design | 9D32C543-24EA-497E-918E-387C8A66BF1A |
| 2 | Design | 9D32C543-24EA-497E-918E-387C8A66BF1A |
| 3 | AnotherDesign | 532C543E-24EA-497E-918E-387C8A66BF1A |
+-----------+---------------+--------------------------------------+
正如您所看到的,多个设计可以具有相同的DesignGroupId,因此我进行如下查询:
DECLARE @DesignName VARCHAR(255) = 'Design'
SELECT
[D].[Name] AS [Display],
[D].[DesignKey] AS [Value]
FROM
[Design] AS [D]
JOIN
[DesignGroup] AS [DG] ON [D].[DesignGroupId] = [DG].[DesignGroupId]
GROUP BY
[D].[Name], [D].[DesignKey];
我的期望结果是,每个DesignGroupId只获得一个值一个[Display]和一个[value],因此我的期望结果是:
+---------------+-------+
| Display | Value |
+---------------+-------+
| Design | 1 |
| AnotherDesign | 3 |
+---------------+-------+
但我得到的每个设计键的结果如下:
+---------------+-------+
| Display | Value |
+---------------+-------+
| Design | 1 |
| Design | 2 |
| AnotherDesign | 3 |
+---------------+-------+
我怎样才能解决这个问题?关于您的目标是为每个名称显示和组获取最小的DesignKey值吗?您可以将结果包装到最小值外部查询中:
SELECT DISPLAY, MIN(VALUE) from (
SELECT
[D].[Name] AS [Display],
[D].[DesignKey] AS [Value]
FROM
[Design] AS [D]
JOIN
[DesignGroup] AS [DG] ON [D].[DesignGroupId] = [DG].[DesignGroupId]
GROUP BY
[D].[Name], [D].[DesignKey])
GROUP BY Display;
我不明白你为什么要加入这些表格。 您想要的结果仅取决于表[Design]中的数据。 因此,按[Name]分组并获得[DesignKey]的最小值: 但是,如果该表只有一个DesignGroupId值,这就可以了。 其他DesignGroupID的结果是什么? 可能按[DesignGroupId]、[Name]分组:
为什么要1而不是2,或者两者都要?作为一个人,你用什么逻辑来决定一个而不是另一个?它只是随机选取一个设计键吗?或者选择最小的设计键?没有聚合的分组没有多大意义。
SELECT
[Name] AS [Display],
MIN([DesignKey]) AS [Value]
FROM [Design]
GROUP BY [Name];
SELECT
[DesignGroupId],
[Name] AS [Display],
MIN([DesignKey]) AS [Value]
FROM [Design]
GROUP BY [DesignGroupId], [Name];