Мне нужна помощь в создании запроса. У меня есть таблица клиента с уникальной информацией о клиенте, идентифицируемая по уникальному идентификатору клиента. У меня также есть таблица Client_UserDefinedFields, которая содержит значения пользовательских данных для клиентов. Они связаны через ClientID, и в таблице Client_UserDefinedFields может быть много записей для ClientID.
Моя ситуация такова, что есть 3 пользовательских поля данных, в которых мне нужно знать значения для данного клиента (как показано в моей инструкции CASE). Мой текущий запрос возвращает клиента 3 раза (строка для каждого значения), и я хочу видеть клиента только один раз (одну строку), и эти значения отображаются в виде столбцов. Не уверен, если это возможно или как к этому. Кроме того, когда я попытался использовать оператор CASE в своем выборе, я не могу использовать AS 'fieldname' для его идентификации - так как он дает мне ошибку по ключевому слову AS.
Пример моего текущего оператора SQL SELECT
SELECT
c.ClientID
, c.LastName
, c.FirstName
, c.MiddleName
, CASE WHEN cudf.UserDefinedFieldFormatULink = '93fb3820-38aa-4655-8aad-a8dce8aede' THEN cudf.UDF_ReportValue --AS 'DA Status'
WHEN cudf.UserDefinedFieldFormatULink = '2144a742-08c5-4c96-b9e4-d6f1f56c76' THEN cudf.UDF_ReportValue --AS 'FHAP Status'
WHEN cudf.UserDefinedFieldFormatULink = 'c3d29be9-af58-4241-a02d-9ae9b43ffa' THEN cudf.UDF_ReportValue --AS 'HCRA Status'
END
FROM Client_Program cp
INNER JOIN client c ON c.ulink = cp.clientulink
INNER JOIN code_program p ON p.ulink = cp.programulink
INNER JOIN Code_System_State css ON c.ContactMailingStateUlink = css.ulink
INNER JOIN Code_ClientStatus ccs ON c.ClientStatusULink = ccs.ULink
INNER JOIN Client_UserDefinedField cudf ON c.ULink = cudf.ClientULink
AND cp.ProgramStatusULink = '1' -- Open (active) program
AND c.ClientStatusULink = '10000000' --Active client
AND cp.programulink in ('7280f4a7-cd94-49be-86ad-a74421ff6f',
'0a9b94a3-edd7-4918-b79c-bf2b20f9da',
'54f6c691-2eba-49e5-8380-85f5349bca',
'ed8c497d-d4fe-41d7-a218-4235fd0734',
'5be826f0-b3c3-4ebe-871d-4d20b56da5')
AND cudf.UserDefinedFieldFormatULink IN ('93fb3820-38aa-4655-8aad-a8dce8aede', -- DA Status
'2144a742-08c5-4c96-b9e4-d6f1f56c76', --FHAP Status
'c3d29be9-af58-4241-a02d-9ae9b43ffa') --HCRA Status
Опять же, моя проблема в том, что я не хочу возвращать одного и того же клиента несколько раз, если у него было более одной записи в таблице Client_UserDefinedFields. Я хотел бы привести это в один ряд, чтобы каждое поле «Состояние» было правильно заполнено в виде столбцов. Как мне это сделать? Вот пример моего текущего выхода:
ClientID LastName FirstName MiddleName PCHP/HCH Status DA Status FHAP Status HCRA Status
XXXXXXXXXXXX River Mike Allan Active (null) - None Selected - (null)
XXXXXXXXXXXX River Mike Allan Active Active (null) (null)
XXXXXXXXXXXX River Mike Allan Active (null) (null) - None Selected -
В конечном итоге хотелось бы видеть только одну запись со всеми значениями
ClientID LastName FirstName MiddleName PCHP/HCH Status DA Status FHAP Status HCRA Status
XXXXXXXXXXXX River Mike Allan Active Active - None Selected - - None Selected -
Примеры очень полезны, так как я не гуру SQL. Спасибо!