#sql-server #where-clause
#sql-сервер #where-предложение
Вопрос:
Итак, я составил отчет, в котором подсчитано, сколько контрактов финансируется за каждый месяц в течение 2014 года.
Итак, теперь я должен вычислить общее количество для всех контрактов, которые находятся ТОЛЬКО в ОБСЛУЖИВАНИИ.
Я имею в виду, что у меня есть таблица с именем tlkOrigDept. В этой таблице у меня есть это
Table tlkOrigDept
orig_dept_id Orig_Dept_Name
1 Sales
2 Service
3 Famp;I
4 Other
5 Direct Marketing
Итак, я должен получить все финансируемые контракты ТОЛЬКО от службы, которая является ‘orig_dept_id’ = 2 Так что это мой запрос, но проблема, которую я вижу, заключается в моем предложении where. Потому что, когда я меняю orig_dept_Id на 3, он работает, но не для 2. Он просто показывает пустой, а не сообщение об ошибке.
Пользователь вводит @Begin_date и @End_Date пользователя, чем выбирает компанию, которая является @Program. Пользователь должен видеть ВСЕ ФИНАНСИРУЕМЫЕ контракты за каждый месяц, которые относятся ТОЛЬКО к СЕРВИСУ.
Я либо вижу проблему в операторе SELECT, либо в моем предложении WHERE
Вот мой запрос
[code="sql"]
Alter Proc spGetAdminServiceYTD
(@Begin_Date DATETIME,
@End_Date DATETIME,
@program int=null) As
Declare @year int
Set @year = 2014
Declare @orig_dept_ID Int
Set @orig_dept_ID = 2
Begin
SELECT d.name, a.dealer_code, b.last_name, b.city, b.state, b.phone,e.orig_dept_name
, COUNT(CASE WHEN MONTH(c.orig_dept_id) = 1 THEN 1 ELSE NULL END) January
, COUNT(CASE WHEN MONTH(c.orig_dept_id) = 2 THEN 1 ELSE NULL END) Feburary
, COUNT(CASE WHEN MONTH(c.Funded_date) = 3 THEN 1 ELSE NULL END) March
, COUNT(CASE WHEN MONTH(c.Funded_date) = 4 THEN 1 ELSE NULL END) April
, COUNT(CASE WHEN MONTH(c.Funded_date) = 5 THEN 1 ELSE NULL END) May
, COUNT(CASE WHEN MONTH(c.Funded_date) = 6 THEN 1 ELSE NULL END) June
, COUNT(CASE WHEN MONTH(c.Funded_date) = 7 THEN 1 ELSE NULL END) July
, COUNT(CASE WHEN MONTH(c.Funded_date) = 8 THEN 1 ELSE NULL END) August
, COUNT(CASE WHEN MONTH(c.Funded_date) = 9 THEN 1 ELSE NULL END) September
, COUNT(CASE WHEN MONTH(c.Funded_date) = 10 THEN 1 ELSE NULL END) October
, COUNT(CASE WHEN MONTH(c.Funded_date) = 11 THEN 1 ELSE NULL END) November
, COUNT(CASE WHEN MONTH(c.Funded_date) = 12 THEN 1 ELSE NULL END) December
, count(1) As YTD
FROM tdealer a
JOIN tContact b ON a.contact_id = b.contact_id
JOIN tContract c ON a.dealer_id = c.dealer_id
JOIN tCompany d ON c.company_id = d.company
JOIN tlkOrigDept E ON c.orig_dept_id = e.orig_dept_id
WHERE c.orig_dept_id = 2
And d.company_id = @program
AND c.Funded_date amp;>= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-5, 0)
And YEAR(c.Funded_date) = @Year
And c.Funded_date amp;< DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE())-1, 0)
And (c.funded_date) between @Begin_Date And @End_Date
GROUP BY
d.name,
a.dealer_code,
b.last_name,
b.city,
b.state,
b.phone,
MONTH(c.funded_date),
Month(e.orig_dept_name),
e.orig_dept_name
end
exec spGetAdminServiceYTD '01/01/2014', '05/30/2014', '47'
Комментарии:
1. Имеет ли значение (‘F amp; I’) соответствующие строки во всех других таблицах? В противном случае вы не получите строки обратно, поскольку используете внутренние соединения.
2. Что именно означает «он просто показывает пустой»? Есть ли пустой результирующий набор?
3. Для (‘F amp; I’) он показывает результаты, но для 1 компании, когда я ввожу «47» для программы. Если я попытаюсь ввести любую другую программу, я получу пустой набор результатов. И да, Мартин, я имел в виду пустой результирующий набор, когда когда-либо выполняю. Также, если я установлю c.orig_Dept_Id = 2, я получу пустой результирующий набор для всех компаний. Но когда я устанавливаю c.orig_Dept_Id = 3, компания ’47’ работает только по какой-то причине, и никакая другая @program не будет работать. Я пытался разобраться в этом весь день.
4. Предполагается, что данные за январь и февраль должны поступать из идентификатора отдела или с даты финансирования, как и все остальное?
5. О, игнорируйте, что я должен был поставить (c.funded_date) вместо (c.orig_Dept_ID), как и в остальные месяцы.