Отображать только номер подзаказа, который имеет MOrderNo

#sql #sql-server #stored-procedures

Вопрос:

У меня есть 2 столбца, которые являются MOrderNum и SubOrderNum. MOrderNum — номер основного заказа, созданный после утверждения номера дополнительного заказа. Как отображать только MSubNum, которые имеют несколько SubOrderNum?

Пример

MOrderNum SubOrderNum
A123 A123-01
A123 A123-02
M111 B001
M222 C001

данные, которые должны отображаться, это

MOrderNum SubOrderNum
A123 A123-01
A123 A123-02

Комментарии:

1. Where MOrderNum is not null ?? ИЛИ Where MOrderNum != ' ' ??

2. @Ullas, я пытался поставить условие where, но оно по-прежнему показывает значение, равное null

Ответ №1:

  --it will check if MOrderNum exists in the counting list
SELECT MOrderNum, SubOrderNum
from tbl
WHERE MOrderNum in(
      --It will take all the MOrderNum with their count more than one
      SELECT MOrderNum FROM tbl
      GROUP BY MOrderNum
      HAVING COUNT(MOrderNum)>1
  )
 Order by MOrderNum
 

Демонстрация скрипки

Комментарии:

1. Нет проблем. Рад помочь ^_ ^

Ответ №2:

Вы можете сделать это более эффективно с помощью оконной функции

 SELECT MOrderNum, SubOrderNum
FROM (
    SELECT *,
      cnt = COUNT(*) OVER (PARTITION BY MOrderNum)
    FROM tbl
) tbl
WHERE cnt > 1;
 

Ответ №3:

это также должно работать:

 SELECT a.* 
FROM (
    SELECT MOrderNum
    FROM [your table]    
    GROUP BY MOrderNum
    HAVING COUNT(DISTINCT SubOrderNum) > 1  
    ) AS b 
INNER JOIN [your table] AS a              
ON a.MOrderNum = b.MOrderNum
ORDER BY a. MOrderNum