Skip to content

Commit 20a5b7f

Browse files
committed
Fix #68 disabilities empty array structure
1 parent bdd9a40 commit 20a5b7f

File tree

1 file changed

+32
-26
lines changed

1 file changed

+32
-26
lines changed

sql_json_query/populate_ssd_api_data_staging_2016.sql

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ can be appended into the main SSD and run as one - insert locations within the S
2828

2929

3030

31-
DECLARE @VERSION nvarchar(32) = N'0.2.9';
31+
DECLARE @VERSION nvarchar(32) = N'0.3.0';
3232
RAISERROR(N'== CSC API staging build: v%s ==', 10, 1, @VERSION) WITH NOWAIT;
3333

3434

@@ -319,12 +319,13 @@ RawPayloads AS (
319319
END AS [sex], -- 10
320320

321321
/* SSD data coerce into API JSON spec */
322-
LEFT(NULLIF(LTRIM(RTRIM(p.pers_ethnicity)), ''), 4) AS [ethnicity] -- 11
322+
LEFT(NULLIF(LTRIM(RTRIM(p.pers_ethnicity)), ''), 4) AS [ethnicity], -- 11
323323

324324
JSON_QUERY(
325325
CASE
326326
WHEN disab.disabilities IS NOT NULL
327327
THEN disab.disabilities
328+
-- force ["NONE"] when outer apply returns NULL|no disabilities
328329
ELSE '["NONE"]'
329330
END
330331
) AS [disabilities], -- 12
@@ -565,7 +566,7 @@ RawPayloads AS (
565566

566567
/* SSD data coerce into API JSON spec */
567568
-- this data point being coerced until superceded by change in source data field for systemC users
568-
MIN(LEFT(NULLIF(LTRIM(RTRIM(clae.clae_cla_episode_start_reason)), ''), 1)) AS [start_reason] -- 39
569+
MIN(LEFT(NULLIF(LTRIM(RTRIM(clae.clae_cla_episode_start_reason)), ''), 1)) AS [start_reason], -- 39
569570

570571
clap.clap_cla_placement_postcode AS [postcode], -- 40
571572

@@ -708,30 +709,35 @@ RawPayloads AS (
708709
JOIN EligibleBySpec elig ON elig.pers_person_id = p.pers_person_id -- either unborn, or 26th bday falls on or after @ea_cohort_window_start (deceased not filtered)
709710
JOIN SpecInclusion si ON si.person_id = p.pers_person_id -- appearing in ActiveReferral, WaitingAssessment, CIN plan, CP plan, LAC, Care leavers 16 to 25, Disabled
710711

711-
/* Disabilities array */
712+
/* Disabilities array, return NULL when no codes */
712713
OUTER APPLY (
713-
SELECT JSON_QUERY(
714-
N'[' +
715-
ISNULL(
716-
STUFF((
717-
SELECT N',' + QUOTENAME(u.code, '"')
718-
FROM (
719-
SELECT TOP (12) code
720-
FROM (
721-
SELECT DISTINCT
722-
UPPER(LTRIM(RTRIM(d2.disa_disability_code))) AS code
723-
FROM ssd_disability AS d2
724-
WHERE d2.disa_person_id = p.pers_person_id
725-
AND d2.disa_disability_code IS NOT NULL
726-
AND LTRIM(RTRIM(d2.disa_disability_code)) <> ''
727-
) d
728-
ORDER BY code
729-
) u
730-
FOR XML PATH(''), TYPE
731-
).value('.', 'nvarchar(max)'), 1, 1, N''),
732-
N''
733-
) + N']'
734-
) AS disabilities
714+
SELECT
715+
CASE
716+
WHEN EXISTS (
717+
SELECT 1
718+
FROM ssd_disability d0
719+
WHERE d0.disa_person_id = p.pers_person_id
720+
AND NULLIF(LTRIM(RTRIM(d0.disa_disability_code)), '') IS NOT NULL
721+
)
722+
THEN JSON_QUERY(
723+
N'[' +
724+
STUFF((
725+
SELECT N',' + QUOTENAME(u.code, '"')
726+
FROM (
727+
SELECT TOP (12)
728+
UPPER(LTRIM(RTRIM(d2.disa_disability_code))) AS code
729+
FROM ssd_disability d2
730+
WHERE d2.disa_person_id = p.pers_person_id
731+
AND NULLIF(LTRIM(RTRIM(d2.disa_disability_code)), '') IS NOT NULL
732+
GROUP BY UPPER(LTRIM(RTRIM(d2.disa_disability_code)))
733+
ORDER BY UPPER(LTRIM(RTRIM(d2.disa_disability_code)))
734+
) u
735+
FOR XML PATH(''), TYPE
736+
).value('.', 'nvarchar(max)'), 1, 1, N'')
737+
+ N']'
738+
)
739+
ELSE NULL
740+
END AS disabilities
735741
) AS disab
736742

737743
/* SDQ prebuild, reuse once, and flag presence */

0 commit comments

Comments
 (0)