#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