Получение неверных данных из отношения - PullRequest
0 голосов
/ 14 июня 2019

У меня есть 2 таблицы:

Таблица DesignGroup:

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

Мой желательный результат этого - получить только одно значение, одно [Display] и одно [Value] каждого DesignGroupId, поэтому мой результат желаний был:

+---------------+-------+
|    Display    | Value |
+---------------+-------+
| Design        |     1 |
| AnotherDesign |     3 |
+---------------+-------+

Но я получаю результат, потому что DesignKey вроде:

+---------------+-------+
|    Display    | Value |
+---------------+-------+
| Design        |     1 |
| Design        |     2 |
| AnotherDesign |     3 |
+---------------+-------+

Как я могу решить это? Привет

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Я не понимаю, почему вам нужно присоединиться к столам.Требуемые результаты зависят только от данных из таблицы [Design].Так что GROUP BY [Name] и получите минимальное значение [DesignKey]:

SELECT 
    [Name] AS [Display],
    MIN([DesignKey]) AS [Value]
FROM [Design]
GROUP BY [Name];

Но это будет хорошо, если в таблице есть только одно значение для DesignGroupId.Что вам нужно в результате для других DesignGroupId с?Может быть GROUP BY [DesignGroupId], [Name]:

SELECT 
    [DesignGroupId], 
    [Name] AS [Display],
    MIN([DesignKey]) AS [Value]
FROM [Design]
GROUP BY [DesignGroupId], [Name];
0 голосов
/ 14 июня 2019

Ваша цель - получить минимальное значение 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...