I have 2 columns which are MOrderNum and SubOrderNum. MOrderNum is for Master Order No that created after approving Sub Order No. How to only display the MSubNum that have multiple SubOrderNum?
Example
MOrderNum | SubOrderNum |
---|---|
A123 | A123-01 |
A123 | A123-02 |
M111 | B001 |
M222 | C001 |
the data that should be displayed is
MOrderNum | SubOrderNum |
---|---|
A123 | A123-01 |
A123 | A123-02 |
CodePudding user response:
--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
CodePudding user response:
You can do this more efficiently with a window function
SELECT MOrderNum, SubOrderNum
FROM (
SELECT *,
cnt = COUNT(*) OVER (PARTITION BY MOrderNum)
FROM tbl
) tbl
WHERE cnt > 1;
CodePudding user response:
this should work as well:
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