выбрать строки на основе одинаковых значений столбцов - PullRequest
0 голосов
/ 06 сентября 2018

считают, что у нас есть таблица с этими столбцами Я бы fk_newsId fk_NewsGroupId fk_NewsZoneId

Мне нужно выбрать все записи с одинаковыми fk_NewsGroup и fk_NewsZone как то так

+----+-----------+--------------+-------------+
| Id | fk_NewsId | fk_NewsGroup | fk_NewsZone |
+----+-----------+--------------+-------------+
|  1 |        60 |            5 |           8 |
|  2 |        30 |            5 |           8 |
|  3 |        31 |            9 |          20 |
|  4 |         5 |            9 |          20 |
|  5 |        12 |            9 |          20 |
|  6 |      1000 |           20 |          11 |
|  7 |        21 |           20 |          11 |
|  8 |         6 |           20 |          11 |
+----+-----------+--------------+-------------+

как это сделать? Я подхожу к группе, как это но это не дает желаемого результата

select fk_NewsId, fk_NewsGroup,fk_NewsZone  from tbl_test
group by fk_NewsGroup,fk_NewsZone,fk_NewsId

Ответы [ 3 ]

0 голосов
/ 06 сентября 2018

Вы можете попробовать использовать COUNT с оконной функцией, чтобы получить столбцы count на fk_NewsGroup и fk_NewsZone.

тогда получите счет больше единицы.

SELECT * 
FROM (
    SELECT *,COUNT(*) OVER(PARTITION BY fk_NewsGroup,fk_NewsZone ORDER BY fk_NewsZone) cnt
    FROM tbl_test
)t1
where t1.cnt > 1

dbfiddle

0 голосов
/ 06 сентября 2018

Не совсем понятно, что вы имеете в виду, но что-то вроде этого:

SELECT t.Id, t.fk_NewsId, t.fk_NewsGroup, t.fk_NewsZone FROM tbl_test t
INNER JOIN (
SELECT fk_NewsGroup,fk_NewsZone, COUNT(*) AS Counted FROM tbl_test
GROUP BY fk_NewsGroup,fk_NewsZone
HAVING COUNT(*) > 1) g
ON t.fk_NewsGroup = g.fk_NewsGroup
AND t.fk_NewsZone = g.fk_NewsZone

Пример DBFiddle

0 голосов
/ 06 сентября 2018

Я бы использовал Group by и сделал бы это следующим образом:

select max(id) as Id, Max(fk_NewsId) as fk_NewsId, fk_NewsGroup,fk_NewsZone from #temp
group by fk_NewsGroup,fk_NewsZone
...