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];