Как запустить подсчет на основе подмножества запроса выбора - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть база данных, в которой указан номер детали по соответствующей группе моделей.Примерно половина деталей являются уникальными для модельной группы.Мне было интересно, есть ли способ выбрать только те номера деталей, которые являются уникальными для группы моделей.

Я нашел не элегантный обходной путь для проблемы со следующим кодом:

'''

Select Distinct

                            a.*
                            ,b.count
                from
                        (SELECT
                                [PART_NO]
                                ,[Family]
                          FROM [dbo].[Mapping_Perkins_Parts_Series_Models] ) a
                    left join 
                        (SELECT distinct
                                [PART_NO]
                                ,count(part_no) as count
                          FROM [dbo].[Mapping_Perkins_Parts_Series_Models]
                          group by part_no ) b

                on b.PART_NO = a.PART_NO
                where count = 1  

'' '

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

'' '

Набор данных: (Part_No, семейство)

  (1, a)
  (1, b)
  (2, a)
  (3, b)
  (4, a)
  (4, b)
  (5, b)
  (6, a)

Ожидаемый результат: (Part_No, Family) (2, a) (3, b) (5, b) (6, a)

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Если ваша СУБД поддерживает оконные функции, вы можете выполнить подсчет окон в подзапросе и отфильтровать во внешнем запросе, например:

SELECT *
FROM (
    SELECT t.*, COUNT(*) OVER(PARTITION BY Part_No) cnt
    FROM mytable t
) x
WHERE cnt = 1
0 голосов
/ 27 сентября 2019

Попробуйте:

select * from
(
  select PART_NO,count(distinct Family) PartFamCount
  from [dbo].[Mapping_Perkins_Parts_Series_Models]
  group by PART_NO
)x
where PartFamCount=1
...