Повторяющиеся строки запроса к базе данных SQL Northwind

Я пытаюсь создать запрос, который вернет сообщение, если в заказе больше заказанных продуктов, чем в наличии, но у него есть дубликаты, и я не могу понять, почему. Смотрите скриншот ниже: введите описание изображения здесь

Запрос:

SELECT  a.OrderID, a.CustomerID,
(SELECT SUM(Subtotal) from [Order Subtotals] AS f 
  where a.OrderID = f.OrderID) as Total,
(Select SUM(Quantity) as Quantity from dbo.[Order Details Extended] b
  where a.OrderID = b.OrderID) as Quantity,
 ( SELECT
             CASE 
                  WHEN Quantity > d.UnitsInStock or Discontinued = 1 
                     THEN 'error in order' 
                  ELSE ''
             END AS varchar) as Messagee
FROM            dbo.Orders AS a

 Left join [Order Details Extended] as c on a.OrderID = c.OrderID
 Left join Products as d on c.ProductID = d.ProductID

Distinct по-прежнему будет возвращать дубликаты, например, если один orderid отображается три раза, а два из них имеют пустые сообщения, тогда отличное удаление одного из них, но по-прежнему будет отображать другое + сообщение с сообщением об ошибке.

MartinS 08.06.2018 15:58

Какого результата вы хотите, когда есть и "ошибки по порядку", и нет? Либо пропустите этот столбец и выполните SELECT DISTINCT. Или сделайте GROUP BY, чтобы выбрать свой выбор.

jarlh 08.06.2018 16:19

если есть и «ошибка в порядке», и пустое сообщение, оно должно возвращать только «ошибка в порядке». Если я добавлю «Выбрать отдельный случай», он все равно вернет оба.

MartinS 08.06.2018 16:25

Затем сделайте GROUP BY!

jarlh 08.06.2018 16:26

Группировать по чему? Невозможно сгруппировать по сообщениям, потому что это недопустимый столбец.

MartinS 08.06.2018 16:32

GROUP BY по другим выбранным столбцам. Сделайте MAX (сообщение) в списке выбора.

jarlh 08.06.2018 16:33

Можете ли вы привести пример того, как будет выглядеть MAX в messagee?

MartinS 08.06.2018 16:42
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
7
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Правильный запрос:

SELECT  a.OrderID, a.CustomerID, sum(os.subtotal) as Total,
 SUM(ode.Quantity) as quantity,
  CASE WHEN COUNT(
   CASE WHEN Quantity > pro.UnitsInStock OR Discontinued = 1 THEN 1 END
 ) > 0 THEN 'error in order' ELSE '' END AS Message
from dbo.Orders as a
Left join [Order Details Extended] as ode
on a.OrderID = ode.OrderID
Left join Products as pro
on ode.ProductID = pro.ProductID
left join [Order Subtotals] as os
on a.OrderID = os.OrderID

group by a.OrderID, a.CustomerID 

Другие вопросы по теме