Вообразите это как студенческий тест.

10 учеников получают оценку C.
6 студентов получают степень бакалавра.
1 студент получает оценку А.

Вместо того, чтобы показать, что 1 ученик получил A, есть ли способ показать имя ученика, который получил этот результат?

enter image description here

Это часть набора результатов, который я получаю. Эти 2 буквы представляют 2 первые буквы 6-буквенной строки, соответствующей полке и ее складу. Если количество (значение справа) равно 1, я хочу отобразить полное значение полки.

В настоящее время я использую SUBSTRING, чтобы получить 2 буквы, и COUNT, чтобы получить количество

Запрос, который я использую до сих пор, может показаться сложным, но здесь он

SELECT  DISTINCT SUBSTRING(location, 1, 2) AS ShelfNum,
        COUNT(location) as Quantity
FROM    warehouse_locations
WHERE   unitId_unitId = 1
GROUP BY SUBSTRING(location, 1, 2)
ORDER BY ShelfNum asc

Если я пытаюсь добавить полное местоположение в конце, если количество равно 1, я получаю ошибку группировки

0
kieron oates 24 Апр 2017 в 18:15

2 ответа

Лучший ответ

Вы можете использовать выражение case для выбора между max(name) и count(location) в зависимости от результата. Вам нужно будет преобразовать count(location) в тип данных, который возвращается max(name).

Пример сервера Sql:

select  
    substring(location, 1, 2) as ShelfNum
  , case when count(location) = 1 then max(name)
      else cast(count(location) as varchar(32))
      end as Quantity
from warehouse_locations
where unitId_unitId = 1
group by substring(location, 1, 2)
order by ShelfNum asc

Также: вам не нужно использовать distinct, когда вы используете group by.

2
SqlZim 24 Апр 2017 в 15:23

Это будет работать.

SELECT CASE WHEN Quantity = 1
            THEN location
            ELSE ShelfNum END as ShelfNum
       ,Quantity
FROM (
SELECT  DISTINCT SUBSTRING(location, 1, 2) AS ShelfNum,
        location,
        COUNT(location) as Quantity
FROM    warehouse_locations
WHERE   unitId_unitId = 1
GROUP BY SUBSTRING(location, 1, 2), location
)
ORDER BY ShelfNum asc
1
Jeremy Real 24 Апр 2017 в 15:23