Skip to content

Commit 3cdfa95

Browse files
committed
removed string_agg refs for assessment_factors as legacy fix
1 parent d134f06 commit 3cdfa95

File tree

1 file changed

+92
-105
lines changed

1 file changed

+92
-105
lines changed

deployment_extracts/systemc/live/systemc_sqlserver_v1.3.1_1_20251103.sql renamed to deployment_extracts/systemc/live/systemc_sqlserver_v1.3.2_1_20251110.sql

Lines changed: 92 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ INSERT INTO ssd_development.ssd_version_log
165165
(version_number, release_date, description, is_current, created_by, impact_description)
166166
VALUES
167167
-- insert & update for CURRENT version (using MAJOR.MINOR.PATCH)
168-
('1.3.1', '2025-10-03', 'Coventry suggested on ssd_assessment_factors', 1, 'admin', 'adjmts provided by Coventry to provide more robust pulling of assessment factor data where filter might not align with prev-family assessments-');
168+
('1.3.2', '2025-11-10', 'Block out string_agg on ssd_assessment_factors', 1, 'admin', 'fix needed to prevent legacy sql failing on string_agg in modern selection block');
169169

170170

171171

@@ -191,7 +191,8 @@ VALUES
191191
('1.2.7', '2025-09-10', 'remove ssd_api_data_staging - now part of api release', 0, 'admin', 'patch fix'),
192192
('1.2.8', '2025-09-13', 'assessment_factors & cla_episodes refactor', 0, 'admin', 'early adopters suggested patch fix'),
193193
('1.2.9', '2025-09-22', 'assessment_factors refactor now with pre-aggr, fix pre-compile issue SQL <2016', 0, 'admin', 'improved run time perf, ease of opt A/B toggle'),
194-
('1.3.0', '2025-09-24', 'New ssd_cohort for cohort visibility/monitoring', 0, 'admin', 'provides breakdown of cohort origins - later use to ease current EXISTS backchecks on ssd_person');
194+
('1.3.0', '2025-09-24', 'New ssd_cohort for cohort visibility/monitoring', 0, 'admin', 'provides breakdown of cohort origins - later use to ease current EXISTS backchecks on ssd_person'),
195+
('1.3.1', '2025-10-03', 'Coventry suggested on ssd_assessment_factors', 0, 'admin', 'adjmts provided by Coventry to provide more robust pulling of assessment factor data where filter might not align with prev-family assessments-');
195196

196197

197198
-- META-ELEMENT: {"type": "test"}
@@ -399,10 +400,6 @@ CREATE NONCLUSTERED INDEX idx_ssd_person_ethnicity_gender ON ssd_developme
399400
PRINT 'Table created: ' + @TableName;
400401

401402

402-
/*SSD Person filter (notes): - Implemented*/
403-
-- [done]contact in last 6yrs - HDM.Child_Social.FACT_CONTACTS.CONTACT_DTTM - -- might have only contact, not yet RFRL
404-
-- [done] has open referral - FACT_REFERRALS.REFRL_START_DTTM or doesn't closed date or a closed date within last 6yrs
405-
-- [picked up within the referral] active plan or has been active in 6yrs
406403

407404
/*SSD Person filter (notes): - ON HOLD/Not included in SSD Ver/Iteration 1*/
408405
--1
@@ -433,8 +430,10 @@ PRINT 'Table created: ' + @TableName;
433430
-- Author: D2I
434431
-- Version: 1.0
435432
--
436-
-- Status: [R]elease
437-
-- Remarks: Provides stable join pattern everywhere, shift from ssd_person
433+
-- Status: [D]ev
434+
-- Remarks: This is an in dev table in order to better optimise the process of getting SSD cohort
435+
-- details into other related tables and help flag why they are included.
436+
-- Provides stable join pattern everywhere, shift from ssd_person
438437
-- for WHERE EXISTS to reduce scan loads during ssd deployment. Provide
439438
-- flags for record(s) source visibility.
440439
-- Dependencies:
@@ -583,14 +582,14 @@ rollup AS (
583582
INSERT ssd_development.ssd_cohort(
584583
dim_person_id, legacy_id,
585584
has_contact, has_referral, has_903, is_care_leaver, has_eligibility,
586-
has_client, has_involvement, -- <<< NEW
585+
has_client, has_involvement,
587586
first_activity_dttm, last_activity_dttm
588587
)
589588
SELECT
590589
r.dim_person_id,
591590
MAX(dp.LEGACY_ID) AS legacy_id,
592591
r.has_contact, r.has_referral, r.has_903, r.is_care_leaver, r.has_eligibility,
593-
r.has_client, r.has_involvement, -- <<< NEW
592+
r.has_client, r.has_involvement,
594593
r.first_activity_dttm, r.last_activity_dttm
595594
FROM rollup AS r
596595
LEFT JOIN __SRC__DIM_PERSON AS dp
@@ -2006,7 +2005,6 @@ CREATE TABLE ssd_development.ssd_assessment_factors (
20062005
- Legacy path: FOR XML PATH (SQL Server 2012+)
20072006
======================================================================== */
20082007

2009-
-- META-ELEMENT: {"type": "insert_data"}
20102008
SET XACT_ABORT ON;
20112009

20122010
BEGIN TRY
@@ -2015,6 +2013,7 @@ BEGIN TRY
20152013
/* -------------------------------------------
20162014
Shared prep (raw filtered rows)
20172015
------------------------------------------- */
2016+
IF OBJECT_ID('tempdb..#ssd_TMP_PRE_assessment_factors','U') IS NOT NULL DROP TABLE #ssd_TMP_PRE_assessment_factors;
20182017
SELECT
20192018
ffa.FACT_FORM_ID,
20202019
ffa.ANSWER_NO,
@@ -2043,6 +2042,7 @@ BEGIN TRY
20432042
/* -------------------------------------------
20442043
Compact codes table (de-dup + sort keys)
20452044
------------------------------------------- */
2045+
IF OBJECT_ID('tempdb..#ssd_d_codes','U') IS NOT NULL DROP TABLE #ssd_d_codes;
20462046
SELECT DISTINCT
20472047
d.FACT_FORM_ID,
20482048
d.ANSWER_NO,
@@ -2058,104 +2058,55 @@ BEGIN TRY
20582058
INTO #ssd_d_codes
20592059
FROM #ssd_TMP_PRE_assessment_factors AS d;
20602060

2061-
-- Optional index (IF your LA assessments row count is in the millions)
2061+
-- Optional index (IF your LA assessments row count is millions)
20622062
-- CREATE CLUSTERED INDEX IX_codes ON #ssd_d_codes(FACT_FORM_ID, num_part, alpha_part, ANSWER_NO) INCLUDE (ANSWER);
20632063

20642064
/* -------------------------------------------
2065-
Path selection (prefer modern when available)
2065+
Legacy path: SQL Server 2012+
2066+
Build JSON via FOR XML PATH using ordered #ssd_d_codes
20662067
------------------------------------------- */
2067-
DECLARE @UseModern bit = 1; -- set to 0 force legacy everywhere
2068-
DECLARE @ProductVersion nvarchar(32) = CONVERT(nvarchar(32), SERVERPROPERTY('ProductVersion'));
2069-
DECLARE @Major int = TRY_CONVERT(int, PARSENAME(@ProductVersion, 4)); -- 16=SQL 2022, 15=2019, 14=2017, 11=2012
2070-
2071-
IF (@UseModern = 1 AND @Major >= 16)
2072-
BEGIN
2073-
/* -------------------------------------------
2074-
Modern path: SQL Server 2022+/Azure SQL
2075-
Use STRING_AGG with ORDER BY over compact codes set
2076-
------------------------------------------- */
2077-
INSERT INTO ssd_development.ssd_assessment_factors (
2078-
cinf_table_id,
2079-
cinf_assessment_id,
2080-
cinf_assessment_factors_json
2081-
)
2082-
SELECT
2083-
fsa.EXTERNAL_ID AS cinf_table_id,
2084-
fsa.FACT_FORM_ID AS cinf_assessment_id,
2085-
2086-
-- KEY-VALUES output {"1B": "Yes", "2B": "Yes", ...}
2087-
N'{' + STRING_AGG(
2088-
CONCAT('"', c.ANSWER_NO, '": ', QUOTENAME(c.ANSWER, '"')),
2089-
N', '
2090-
) WITHIN GROUP (ORDER BY c.num_part, c.alpha_part)
2091-
+ N'}' AS cinf_assessment_factors_json
2092-
2093-
-- KEYS-ONLY alternative (swap with lines above if ["1A","2B",...] needed):
2094-
-- N'[' + STRING_AGG(
2095-
-- CONCAT('"', c.ANSWER_NO, '"'),
2096-
-- N', '
2097-
-- ) WITHIN GROUP (ORDER BY c.num_part, c.alpha_part)
2098-
-- + N']' AS cinf_assessment_factors_json
2099-
2100-
2101-
2102-
FROM HDM.Child_Social.FACT_SINGLE_ASSESSMENT AS fsa
2103-
JOIN #ssd_d_codes AS c
2104-
ON c.FACT_FORM_ID = fsa.FACT_FORM_ID
2105-
WHERE fsa.EXTERNAL_ID <> -1
2106-
GROUP BY fsa.EXTERNAL_ID, fsa.FACT_FORM_ID;
2107-
-- Optional scope:
2108-
-- AND fsa.FACT_FORM_ID IN (SELECT cina_assessment_id FROM ssd_development.ssd_cin_assessments)
2109-
END
2110-
ELSE
2111-
BEGIN
2112-
/* -------------------------------------------
2113-
Legacy path: SQL Server 2012+
2114-
Build JSON via FOR XML PATH using ordered #ssd_d_codes
2115-
------------------------------------------- */
2116-
INSERT INTO ssd_development.ssd_assessment_factors (
2117-
cinf_table_id,
2118-
cinf_assessment_id,
2119-
cinf_assessment_factors_json
2120-
)
2121-
SELECT
2122-
fsa.EXTERNAL_ID AS cinf_table_id,
2123-
fsa.FACT_FORM_ID AS cinf_assessment_id,
2124-
(
2125-
SELECT
2126-
-- KEY-VALUES output {"1B": "Yes", "2B": "Yes", ...}
2127-
'{' +
2128-
STUFF((
2129-
SELECT
2130-
', "' + x.ANSWER_NO + '": ' + QUOTENAME(x.ANSWER, '"')
2131-
FROM #ssd_d_codes AS x
2132-
WHERE x.FACT_FORM_ID = fsa.FACT_FORM_ID
2133-
ORDER BY x.num_part, x.alpha_part
2134-
FOR XML PATH(''), TYPE
2135-
).value('.', 'NVARCHAR(MAX)'), 1, 2, '') +
2136-
'}'
2137-
2138-
-- KEYS-ONLY alternative (swap with lines above if ["1A","2B",...] needed):
2139-
-- '[' +
2140-
-- STUFF((
2141-
-- SELECT
2142-
-- ', "' + x.ANSWER_NO + '"'
2143-
-- FROM #ssd_d_codes AS x
2144-
-- WHERE x.FACT_FORM_ID = fsa.FACT_FORM_ID
2145-
-- ORDER BY x.num_part, x.alpha_part
2146-
-- FOR XML PATH(''), TYPE
2147-
-- ).value('.', 'NVARCHAR(MAX)'), 1, 2, '')
2148-
-- + ']'
2149-
2150-
2151-
) AS cinf_assessment_factors_json
2152-
FROM HDM.Child_Social.FACT_SINGLE_ASSESSMENT AS fsa
2153-
JOIN (SELECT DISTINCT FACT_FORM_ID FROM #ssd_d_codes) AS d
2154-
ON d.FACT_FORM_ID = fsa.FACT_FORM_ID
2155-
WHERE fsa.EXTERNAL_ID <> -1;
2156-
-- Optional scope:
2157-
-- AND fsa.FACT_FORM_ID IN (SELECT cina_assessment_id FROM ssd_development.ssd_cin_assessments)
2158-
END
2068+
INSERT INTO ssd_development.ssd_assessment_factors (
2069+
cinf_table_id,
2070+
cinf_assessment_id,
2071+
cinf_assessment_factors_json
2072+
)
2073+
SELECT
2074+
fsa.EXTERNAL_ID AS cinf_table_id,
2075+
fsa.FACT_FORM_ID AS cinf_assessment_id,
2076+
(
2077+
SELECT
2078+
-- KEY-VALUES output {"1B": "Yes", "2B": "Yes", ...}
2079+
'{' +
2080+
STUFF((
2081+
SELECT
2082+
', "' + x.ANSWER_NO + '": ' + QUOTENAME(x.ANSWER, '"')
2083+
FROM #ssd_d_codes AS x
2084+
WHERE x.FACT_FORM_ID = fsa.FACT_FORM_ID
2085+
ORDER BY x.num_part, x.alpha_part
2086+
FOR XML PATH(''), TYPE
2087+
).value('.', 'NVARCHAR(MAX)'), 1, 2, '') +
2088+
'}'
2089+
2090+
-- Awaiting LA/DfE approval
2091+
-- KEYS-ONLY alternative (swap with lines above if ["1A","2B",...] needed):
2092+
-- '[' +
2093+
-- STUFF((
2094+
-- SELECT
2095+
-- ', "' + x.ANSWER_NO + '"'
2096+
-- FROM #ssd_d_codes AS x
2097+
-- WHERE x.FACT_FORM_ID = fsa.FACT_FORM_ID
2098+
-- ORDER BY x.num_part, x.alpha_part
2099+
-- FOR XML PATH(''), TYPE
2100+
-- ).value('.', 'NVARCHAR(MAX)'), 1, 2, '')
2101+
-- + ']'
2102+
2103+
) AS cinf_assessment_factors_json
2104+
FROM HDM.Child_Social.FACT_SINGLE_ASSESSMENT AS fsa
2105+
JOIN (SELECT DISTINCT FACT_FORM_ID FROM #ssd_d_codes) AS d
2106+
ON d.FACT_FORM_ID = fsa.FACT_FORM_ID
2107+
WHERE fsa.EXTERNAL_ID <> -1;
2108+
-- Optional scope:
2109+
-- AND fsa.FACT_FORM_ID IN (SELECT cina_assessment_id FROM ssd_development.ssd_cin_assessments)
21592110

21602111
COMMIT TRANSACTION;
21612112
END TRY
@@ -2168,6 +2119,42 @@ END CATCH;
21682119
IF OBJECT_ID('tempdb..#ssd_d_codes','U') IS NOT NULL DROP TABLE #ssd_d_codes;
21692120
IF OBJECT_ID('tempdb..#ssd_TMP_PRE_assessment_factors','U') IS NOT NULL DROP TABLE #ssd_TMP_PRE_assessment_factors;
21702121

2122+
-- -------------------------------------------------------------------------
2123+
-- Modern path: SQL Server 2022 or Azure SQL only
2124+
-- enable on modern servers, comment out legacy INSERT above and
2125+
-- uncomment this whole block
2126+
-- -------------------------------------------------------------------------
2127+
-- INSERT INTO ssd_development.ssd_assessment_factors (
2128+
-- cinf_table_id,
2129+
-- cinf_assessment_id,
2130+
-- cinf_assessment_factors_json
2131+
-- )
2132+
-- SELECT
2133+
-- fsa.EXTERNAL_ID AS cinf_table_id,
2134+
-- fsa.FACT_FORM_ID AS cinf_assessment_id,
2135+
--
2136+
-- -- KEY-VALUES output {"1B": "Yes", "2B": "Yes", ...}
2137+
-- N'{' + STRING_AGG(
2138+
-- CONCAT('"', c.ANSWER_NO, '": ', QUOTENAME(c.ANSWER, '"')),
2139+
-- N', '
2140+
-- ) WITHIN GROUP (ORDER BY c.num_part, c.alpha_part)
2141+
-- + N'}' AS cinf_assessment_factors_json
2142+
--
2143+
-- -- KEYS-ONLY alternative (swap with lines above if ["1A","2B",...] needed):
2144+
-- -- N'[' + STRING_AGG(
2145+
-- -- CONCAT('"', c.ANSWER_NO, '"'),
2146+
-- -- N', '
2147+
-- -- ) WITHIN GROUP (ORDER BY c.num_part, c.alpha_part)
2148+
-- -- + N']' AS cinf_assessment_factors_json
2149+
--
2150+
-- FROM HDM.Child_Social.FACT_SINGLE_ASSESSMENT AS fsa
2151+
-- JOIN #ssd_d_codes AS c
2152+
-- ON c.FACT_FORM_ID = fsa.FACT_FORM_ID
2153+
-- WHERE fsa.EXTERNAL_ID <> -1
2154+
-- GROUP BY fsa.EXTERNAL_ID, fsa.FACT_FORM_ID;
2155+
-- -- Optional scope:
2156+
-- -- AND fsa.FACT_FORM_ID IN (SELECT cina_assessment_id FROM ssd_development.ssd_cin_assessments)
2157+
21712158

21722159
-- -- META-ELEMENT: {"type": "create_fk"}
21732160
-- ALTER TABLE ssd_development.ssd_assessment_factors ADD CONSTRAINT FK_ssd_cinf_assessment_id

0 commit comments

Comments
 (0)