У меня есть хранимая процедура, которая извлекает данные связи для доски объявлений. По умолчанию он просматривает весь контент, расположенный в отделе зрителей. Однако я разрешаю им выбирать несколько отделов, чтобы увидеть контент вокруг компании, если они захотят ..TSQL Distinct Column в таблице
Проблема, с которой я сталкиваюсь, заключается в том, что для каждого отдела, который они выбирают, он предоставляет одну и ту же запись несколько раз.
В моем запросе, в пункте WHERE
, у меня есть заявление, в котором говорится: AND aud.Department IN (SELECT department FROM @departments)
.
Здесь происходит ошибка. Для каждого отдела в этой временной таблице он возвращает одну и ту же запись.
Как я могу выбрать только отдельные записи из его таблицы? commID
тождественный
-- Fetch our communicatons based on certain criteria
SELECT sub.commID,
sub.status,
sub.content,
CONVERT (VARCHAR (100), sub.distributionDate, 101) AS distributionDate,
sub.subject,
a.FirstName + ' ' + a.LastName AS approver,
b.FirstName + ' ' + b.LastName AS poc,
b.NTID AS NTID,
CONVERT (VARCHAR (100), sub.dateApproved, 101) AS dateApproved,
(SELECT department
FROM comm_audience
WHERE commID = sub.commID
FOR XML PATH ('departments'), ELEMENTS, TYPE, ROOT ('audience'))
FROM comm_submissions AS sub
INNER JOIN
comm_medium AS med
ON sub.commID = med.commID
INNER JOIN
comm_mediumOptions AS mop
ON med.mediumID = mop.mediumID
INNER JOIN
comm_audience AS aud
ON sub.CommID = aud.commID
LEFT OUTER JOIN
dbo.EmployeeTable AS a
ON sub.approver = a.QID
LEFT OUTER JOIN
dbo.EmployeeTable AS b
ON sub.poc = b.QID
WHERE mop.mediumTitle IN ('Digital eBoard') -- Only eBoard Comms
AND aud.Department IN (SELECT department FROM @departments) -- Viewers Department must be in the audience
AND sub.commLocation = @locale -- The comm locale must be the viewers locale
AND sub.status IN ('Completed') -- Only show Approved or Completed Comms
ORDER BY sub.distributionDate DESC
- Обновление
-- Create a temp table of our department(s) we are viewing
DECLARE @departments as TABLE (department varchar(100))
INSERT INTO @departments(department)
SELECT ParamValues.x1.value('department[1]', 'varchar(100)')
FROM @xml.nodes('/root/data/departments/audience') AS ParamValues(x1);
где вы заполнили @departments, показать его, (не тот, кто вниз голосовал) – jfun
Пожалуйста показать наименьшее возможный пример, который воспроизводит вашу проблему. –
Обновлено, чтобы включить ДОПОЛНИТЕЛЬНУЮ информацию, чем то, что у меня было :) – SBB