Подсчет записей в sql server 2012 - PullRequest
0 голосов
/ 31 марта 2019

В моей таблице я хочу выяснить, существует ли в таблице производственный продукт более одного раза. Фактически текстовый код передается в качестве параметра в условии where.

create table productdetails(productid nvarchar(22),textcode varchar(50),textmessage varchar(50))

INSERT INTO  productdetails VALUES('T0001','M0001','ONE')
INSERT INTO  productdetails VALUES('T0001','M0002','TWO')
INSERT INTO  productdetails VALUES('T0009','M0006','THREE')
INSERT INTO productdetails  VALUES('T0002','M0001','FIVE')

если я даю textcode = 'M0001', в котором это условие дает productid = 'T0001' И 'T0002', я хочу проверить, существует ли этот продукт 'T0001' И 'T0002' более одного раза в таблице.

Я использовал приведенный ниже запрос. Это оптимизированный запрос? Или любой другой метод, чтобы проверить это условие.

SELECT COUNT(PRODUCTID),PRODUCTID FROM productdetails WHERE productid in(SELECT PRODUCTID FROM productdetails WHERE TEXTCODE='M0001') 
GROUP BY PRODUCTID HAVING COUNT(*)>1

1 Ответ

1 голос
/ 31 марта 2019

Вы можете использовать условное агрегирование в предложении having, чтобы упростить ваш запрос:

SELECT COUNT(*), PRODUCTID 
FROM productdetails 
GROUP BY PRODUCTID 
HAVING COUNT(CASE WHEN TEXTCODE='M0001' THEN 1 END) > 0
AND COUNT(*) > 1

Этот запрос должен повысить производительность, поскольку вы обращаетесь к таблице только один раз.

Обратите внимание, что для лучшей производительности оба запроса, вероятно, могут получить выгоду от одного и того же индекса - индекс TextCode и ProductId (в таком порядке!) Должен способствовать повышению эффективности обоих запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...