запрос на выбор - PullRequest
       1

запрос на выбор

0 голосов
/ 11 октября 2010

Hallo Friends,

Мне нужен запрос, чтобы выдать сообщение об ошибке при сравнении с таблицей temp_invoice.

Должно сравниваться поле [Task resp #],для поля [PB-ID] в таблице PB_Responsbility для клиента = 3D

формат temp_invoice

Concession Number   [Task resp#]

   TH-123                 12345
   TH-014                 98065
   TH-123                 41027
   TH-567                 12345
   TH-111                 99765
   TH-567                 41027             
   TH-228                 73095             
   TH-001                 09129             
   TH-779                 41027         
   TH-333                 01029     
   TH-722                 03489  

Это должно проверить таблицу базы данных, для которой клиент3D.

TABLE PB_Responsbility

[PB-ID]                      Customer
  09129                        3D
  98065                        AB
  12345                        DC
  41027                        ZH
  99765                        3D
  73095                        UZ

Если клиент не является 3D ИЛИ, если [Task resp #] не найден в таблице PB_Responsbility, он должен выдать сообщение, выбрав отдельный [Taskресп #] из листа Excel.

Здесь необходим вывод "Неверно [Задача соответственно]: - 12345,98065,41027,73095,01029,03489.

Я написалзапрос так,

DECLARE @pb_id_msg VARCHAR(MAX)
SET @pb_id_msg = ''

SELECT @pb_id_msg =  @pb_id_msg + ' ,'
+ CONVERT(VARCHAR(10),[Task resp#]) FROM temp_invoice WHERE [Task resp#]  NOT IN 
    (SELECT [PB-ID] FROM PB_Responsbility WHERE Customer = '3D')
   GROUP BY CONVERT(VARCHAR(10),[Task resp#]).

Это производит результат как требуется. Но если я изменяю запрос с DISTINCT

SELECT DISTINCT @pb_id_msg =  @pb_id_msg + ' ,'
+ CONVERT(VARCHAR(10),[Task resp#]) FROM temp_invoice WHERE [Task resp#]  NOT IN 
    (SELECT [PB-ID] FROM PB_Responsbility WHERE Customer = '3D')

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

1 Ответ

1 голос
/ 11 октября 2010

Похоже, что SQL Server интерпретирует distinct как означающее, что вы хотите присвоить значение переменной только один раз.

Это можно исправить, переместив отличительный в подзапрос:

SELECT  @pb_id_msg =  @pb_id_msg + ' ,' + CONVERT(VARCHAR(10),[Task resp#]) 
FROM    (
        SELECT  DISTINCT [Task resp#]
        FROM    temp_invoice 
        WHERE   [Task resp#]  NOT IN 
                (
                SELECT  [PB-ID] 
                FROM    PB_Responsbility 
                WHERE   Customer = '3D'
                )
        ) as SubQueryAlias
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...