Hi this is my first ever attempt at using SISS, so knowledge isn't that great, in fact pure novice.
I simply need to output the results of the SQL Query below into a CSV file into a suitable location, that's it.
I do keep getting error messages though "the metadata could not be determined etc are temp tables allowed in SSIS
NOTE: Not my SQL query
-- PBI 8694 CCIMS Demographics Extract
/*
this generates a dataset of 900k records and takes about 7 mins to run.
right click on results and save as csv.
this saves as csv but without the headers.
use notepad++ to add in headers from file named headers.txt in my docs/jobs/PBI8694 CCIMS Demograhic Extract on DGLs PC
*/
CREATE TABLE #Example
(
PATIENTOID VARCHAR(50),
address1 VARCHAR(50) NULL,
address2 VARCHAR(50) NULL,
address3 VARCHAR(50) NULL,
address4 VARCHAR(50) NULL,
address5 VARCHAR(50) NULL
);
INSERT INTO
#Example ( PATIENTOID, address1, address2, address3, address4, address5)
SELECT
pcte.OID,LINE1, LINE2, LINE3, LINE4, LINE5
FROM
LZO_PATIENT AS pcte
LEFT JOIN -- patient address
LZO_PATIENTADDRESSROLE AS arcte
ON pcte.OID = arcte.IDENTIFYINGOID
AND arcte.STATUS = 'A'
AND arcte.ROTYPCODE = 'CC_USUALADD'
AND arcte.ENDDTTM IS NULL
AND arcte.OID =
(
SELECT
TOP 1 arcte2.OID
FROM
LZO_PATIENTADDRESSROLE AS arcte2
WHERE
pcte.OID = arcte2.IDENTIFYINGOID
AND arcte2.STATUS = 'A'
AND arcte2.ROTYPCODE = 'CC_USUALADD'
AND arcte2.ENDDTTM IS NULL
ORDER BY
arcte2.DATA_START_DATE DESC
)
LEFT JOIN -- patient address
LZO_PATIENTADDRESS AS pacte
ON pacte.OID = arcte.ADDRESSOID
WHERE
--PASID = 'HEY0798884' and
pcte.STATUS = 'A'
AND pcte.DEATHDTTM IS NULL
;
WITH Relational
AS
( /* Unpivot the data into a more relational form, Only return non-empty address entries, Renumber the addresses in non-empty order */
SELECT
U.PATIENTOID
,name = 'address' + CONVERT(CHAR(1),
ROW_NUMBER() OVER (PARTITION BY U.PATIENTOID ORDER BY U.name))
,U.value
FROM #Example E
UNPIVOT (
value
FOR name
IN (E.address1, E.address2, E.address3, E.address4, E.address5)
) U
WHERE U.value <> SPACE(0)) ,
--- *************************** concept codes look up defined as common table expression for use in main code
--WITH
CTE AS
(SELECT
b.[DOMAIN],
b.[DOMAIN_DESCRIPTION],
b.[CONCEPT_CODE],
b.[CONCEPT_CODE_DESCRIPTION],
b.[HL7_SYNONYM]
FROM
(
SELECT ROW_NUMBER() OVER (PARTITION BY [DOMAIN], [HL7_SYNONYM] ORDER BY [DOMAIN], [HL7_SYNONYM]) AS [Row],
a.[DOMAIN], a.[DOMAIN_DESCRIPTION], a.[CONCEPT_CODE], a.[CONCEPT_CODE_DESCRIPTION], a.[HL7_SYNONYM]
FROM
(
SELECT vsg.[VALUEDOMAINCODE] DOMAIN
, vd.[DomainDescription] DOMAIN_DESCRIPTION
, cc.[CONCEPTCODE] CONCEPT_CODE
, (STUFF(
(SELECT '#' + [Termtext]
FROM [LZO_Term] In_T
WHERE VS.[conceptcodeOID] = In_T.[conceptcodeOID]
AND In_T.[TRMTPCODE] <> 'Synonym'
AND In_T.[Status] = 'A'
ORDER BY [Termtext] FOR XML PATH(''),
TYPE,ROOT
).value('root[1]','nvarchar(max)'),1,1,'')) as [CONCEPT_CODE_DESCRIPTION]
, (STUFF(
(SELECT '#' + [Termtext]
FROM [LZO_Term] In_T
WHERE VS.[conceptcodeOID] = In_T.[conceptcodeOID]
and In_T.[TermKey] = 'CSCLRC'
and In_T.[Status] = 'A'
ORDER BY [Termtext] FOR XML PATH(''),
TYPE,ROOT
).value('root[1]','nvarchar(max)'),1,1,'')) as [HL7_SYNONYM]
, cc.[STATUS]+','+vs.[STATUS] CC_VS_STATUS
FROM [LZO_ValueSet] vs
INNER JOIN [LZO_ValueSetGroup] vsg ON (vs.[ValueSetGroupOID] = vsg.[OID])
INNER JOIN [LZO_ValueDomain] vd ON (vsg.[ValueDomainOID] = vd.[OID])
INNER JOIN [LZO_ConceptCode] cc ON (vs.[conceptcodeoid] = cc.[oid])
WHERE
vsg.[Code] = 'Default'
AND cc.[STATUS] = 'A'
AND vs.[STATUS] = 'A'
) AS a
) AS b
WHERE [Row] = 1
)
-- *********************** end common table expression
, CTE_NHS AS
(SELECT
LOCAL_CODE.LookupValue AS 'LookupValue1'
,LOCAL_CODE.[Description] AS 'Description1'
,NAT_CODE.LookupValue AS 'LookupValue2'
,NAT_CODE.[Description] AS 'Description2'
,LOOKUP_TYPE.LookupType
FROM
tblRefLookup AS LOCAL_CODE
INNER JOIN
tblRefLookupCrossMap AS CROSS_MAP
ON LOCAL_CODE.LookupValueID = CROSS_MAP.FromLookupValueID
INNER JOIN
tblRefLookup AS NAT_CODE
ON CROSS_MAP.ToLookupValueUID = NAT_CODE.[UID]
INNER JOIN
tblRefLookupType AS LOOKUP_TYPE
ON LOCAL_CODE.LookupTypeID = LOOKUP_TYPE.LookupTypeID
WHERE
LOOKUP_TYPE.LookupType = 'PAS NHS NUMBER STATUS INDICATOR'
)
SELECT
p.PASID AS 'CasenoteNumber'
,ISNULL(pid.IDENTIFIER,'') AS 'NHSNumber'
,ISNULL(nhsver.LookupValue2,'') AS 'NHSNumberVerificationStatus'
,'' AS 'MaidenName'
,ISNULL(p.SURNAME,'') AS 'Surname'
,ISNULL(p.MIDDLENAME,'') AS 'MiddleNames'
,ISNULL(p.FORENAME,'') AS 'Forename'
,ISNULL(cctitle.HL7_SYNONYM,'') AS 'Title'
,ISNULL(CONVERT(VARCHAR(10),BIRTHDTTM,111),'') AS 'DateOfBirth'
,ISNULL(ccbirthplace.CONCEPT_CODE_DESCRIPTION,'') AS 'Birthplace'
--,ISNULL(p.PLACEOFBIRTH,'') AS 'Birthplace'
,ISNULL(CONVERT(VARCHAR(10),DEATHDTTM,111) ,'') AS 'PatientDateOfDeath'
,'' AS 'PatientDeathIndicator'
,ISNULL(ccsex.HL7_SYNONYM,'') AS 'Gender'
,ISNULL(ccethnic.HL7_SYNONYM,'') AS 'EthnicGroup'
,ISNULL(OCCUPCODE,'') AS 'Occupation'
,ISNULL(ccnation.HL7_SYNONYM,'') AS 'Nationality'
,ISNULL(patel.LINE1,'') AS 'PhoneHome'
,ISNULL(pamob.LINE1,'') AS 'PhoneMobile'
,ISNULL(pawrk.LINE1,'') AS 'PhoneWork'
,ISNULL(ccmarry.HL7_SYNONYM,'') AS 'MartialStatus'
,ISNULL(ccrelig.HL7_SYNONYM,'') AS 'Religion'
,ISNULL(SPOKLCODE,'') AS 'Language'
--,ISNULL(pa.LINE1,'') AS 'AddressLine1'
--,ISNULL(pa.LINE2,'') AS 'AddressLine2'
--,ISNULL(pa.LINE3,'') AS 'AddressLine3'
--,ISNULL(pa.LINE4,'') + ' ' + ISNULL(pa.LINE5,'')AS 'AddressLine4'
--,ISNULL(pa.POSTCODE,'') AS 'AddressPostcode'
--,'' AS 'AddressDOR'
,ISNULL(Add1.[value],'') AS 'AddressLine1'
,ISNULL(Add2.[value],'') AS 'AddressLine2'
,ISNULL(Add3.[value],'') AS 'AddressLine3'
,ISNULL(Add4.[value],'') AS 'AddressLine4'
,ISNULL(pa.POSTCODE,'') AS 'AddressPostcode'
,'' AS 'AddressDOR'
,'GPSurname' =
CASE
WHEN CHARINDEX(' ',gmpgp.ORGANISATION_NAME) > 0 THEN SUBSTRING(gmpgp.ORGANISATION_NAME,1,CHARINDEX(' ',gmpgp.ORGANISATION_NAME) - 1)
WHEN gmpgp.ORGANISATION_NAME IS NULL THEN ''
ELSE gmpgp.ORGANISATION_NAME
END
--,gmpgp.ORGANISATION_NAME these must've been left in for testing
--,gmpgp.*
,ISNULL(ORG2.DESCRIPTION,'') AS 'GPPCT'
,ISNULL(pcp.CAREPROVIDERID,'') AS 'GPCode'
,ISNULL(org.MAINIDENTIFIER,'') AS 'GPPracticeCode'
,ISNULL(CONVERT(VARCHAR(10),pcp.STARTDTTM,111),'') AS 'GPActiveDate'
,ISNULL(gmp.ADDRESS_LINE_1,'') AS 'GPAddressLine1'
,ISNULL(gmp.ADDRESS_LINE_2,'') AS 'GPAddressLine2'
,ISNULL(gmp.ADDRESS_LINE_3,'') AS 'GPAddressLine3'
,ISNULL(gmp.ADDRESS_LINE_4,'') AS 'GPAddressLine4'
,ISNULL(gmp.POST_CODE,'') AS 'GPPostcode'
,'' AS 'GPDOR' -- district. leave blank
,'' AS 'NOKTitle'
,'' AS 'NOKForename'
,'' AS 'NOKMiddleNames'
,'' AS 'NOKSurname'
,'' AS 'NOKRelationship'
,'' AS 'NOKAddressLine1'
,'' AS 'NOKAddressLine2'
,'' AS 'NOKAddressLine3'
,'' AS 'NOKAddressLine4'
,'' AS 'NOKPostCode'
,'' AS 'NOKDOR'
,'' AS 'NOKPhoneHome'
,'' AS 'NOKPhoneMobile'
,'' AS 'NOKPhoneWork'
,'' AS 'PatientIdentifierList'
FROM
LZO_PATIENT AS p
LEFT JOIN
LZO_PATIENTID AS pid
ON p.OID = pid.PATIENTOID
AND pid.PITYPCODE = 'CC_NATNLID'
AND pid.Status = 'A'
AND pid.MODIFIEDAT =
(
SELECT
TOP 1 pid2.MODIFIEDAT
FROM
LZO_PATIENTID AS pid2
WHERE
p.OID = pid2.PATIENTOID
AND pid2.PITYPCODE = 'CC_NATNLID'
AND pid2.Status = 'A'
ORDER BY
pid2.MODIFIEDAT DESC
)
LEFT JOIN Relational as Add1 on Add1.patientoid = p.OID and Add1.[name] = 'address1'
LEFT JOIN Relational as Add2 on Add2.patientoid = p.OID and Add2.[name] = 'address2'
LEFT JOIN Relational as Add3 on Add3.patientoid = p.OID and Add3.[name] = 'address3'
LEFT JOIN Relational as Add4 on Add4.patientoid = p.OID and Add4.[name] = 'address4'
-- still needed in order to grab postcode
LEFT JOIN -- patient address
LZO_PATIENTADDRESSROLE AS ar
ON p.OID = ar.IDENTIFYINGOID
AND ar.STATUS = 'A'
AND ar.ROTYPCODE = 'CC_USUALADD'
AND ar.ENDDTTM IS NULL
AND ar.OID =
(
SELECT
TOP 1 ar2.OID
FROM
LZO_PATIENTADDRESSROLE AS ar2
WHERE
p.OID = ar2.IDENTIFYINGOID
AND ar2.STATUS = 'A'
AND ar2.ROTYPCODE = 'CC_USUALADD'
AND ar2.ENDDTTM IS NULL
ORDER BY
ar2.DATA_START_DATE DESC
)
LEFT JOIN -- patient address
LZO_PATIENTADDRESS AS pa
ON pa.OID = ar.ADDRESSOID
LEFT JOIN -- patient home tel
LZO_PATIENTADDRESSROLE AS artel
ON p.OID = artel.IDENTIFYINGOID
AND artel.STATUS = 'A'
AND artel.ROTYPCODE = 'CC_TELEPHONE' --= 'CC_AFTERBUSSTEL'
AND artel.ENDDTTM IS NULL
AND artel.OID =
(
SELECT
TOP 1 artel2.OID
FROM
LZO_PATIENTADDRESSROLE AS artel2
WHERE
p.OID = artel2.IDENTIFYINGOID
AND artel2.STATUS = 'A'
AND artel2.ROTYPCODE = 'CC_TELEPHONE'
AND artel2.ENDDTTM IS NULL
ORDER BY
artel2.DATA_START_DATE DESC
)
LEFT JOIN -- patient home tel
LZO_PATIENTADDRESS AS patel
ON patel.OID = artel.ADDRESSOID
LEFT JOIN -- patient mobile
LZO_PATIENTADDRESSROLE AS armob
ON p.OID = armob.IDENTIFYINGOID
AND armob.STATUS = 'A'
AND armob.ROTYPCODE = 'CC_MSGMOB'
AND armob.ENDDTTM IS NULL
AND armob.OID =
(
SELECT
TOP 1 armob2.OID
FROM
LZO_PATIENTADDRESSROLE AS armob2
WHERE
p.OID = armob2.IDENTIFYINGOID
AND armob2.STATUS = 'A'
AND armob2.ROTYPCODE = 'CC_MSGMOB'
AND armob2.ENDDTTM IS NULL
ORDER BY
armob2.DATA_START_DATE DESC
)
LEFT JOIN -- patient mobile
LZO_PATIENTADDRESS AS pamob
ON pamob.OID = armob.ADDRESSOID
LEFT JOIN -- patient work tel
LZO_PATIENTADDRESSROLE AS arwrk
ON p.OID = arwrk.IDENTIFYINGOID
AND arwrk.STATUS = 'A'
AND arwrk.ROTYPCODE = 'CC_WRKTPHONENUM'
AND arwrk.ENDDTTM IS NULL
AND arwrk.OID =
(
SELECT
TOP 1 arwrk2.OID
FROM
LZO_PATIENTADDRESSROLE AS arwrk2
WHERE
p.OID = arwrk2.IDENTIFYINGOID
AND arwrk2.STATUS = 'A'
AND arwrk2.ROTYPCODE = 'CC_WRKTPHONENUM'
AND arwrk2.ENDDTTM IS NULL
ORDER BY
arwrk2.DATA_START_DATE DESC
)
LEFT JOIN -- patient work tel
LZO_PATIENTADDRESS AS pawrk
ON pawrk.OID = arwrk.ADDRESSOID
LEFT JOIN -- GP
LZO_PATIENTCAREPROVIDER AS pcp
ON pcp.PATIENTOID = p.OID
AND pcp.STATUS = 'A'
AND pcp.ENDDTTM is NULL
AND pcp.PRTYPCODE = 'CC_GENPRA1'
AND pcp.OID = -- removes dupes
(
SELECT
TOP 1 pcp2.OID
FROM
LZO_PATIENTCAREPROVIDER AS pcp2
WHERE
pcp2.PATIENTOID = p.OID
AND pcp2.STATUS = 'A'
AND pcp2.ENDDTTM is NULL
AND pcp2.CAREPROVIDERID IS NOT NULL
AND pcp2.PRTYPCODE = 'CC_GENPRA1'
)
LEFT JOIN -- GP name
ODS_GENERAL_MEDICAL_PRACTITIONER AS gmpgp
ON gmpgp.ORGANISATION_CODE = pcp.CAREPROVIDERID
LEFT JOIN -- GP practice
LZO_ORGANISATION AS org
ON org.OID = ORGANISATIONOID
AND org.STATUS = 'A'
LEFT JOIN -- GP practice address
ODS_GENERAL_MEDICAL_PRACTICE AS gmp
ON gmp.ORGANISATION_CODE = org.MAINIDENTIFIER
LEFT JOIN -- PCT
LZO_ORGANISATION AS ORG2
ON org.PARENTORGANISATIONOID = ORG2.OID
LEFT JOIN -- dummy patients table
ADD_DummyPatient AS dummy
ON dummy.LOCAL_PATIENT_NUMBER = p.PASID
/* concept codes joins */
LEFT JOIN
CTE AS cctitle
ON cctitle.DOMAIN = 'TITLE'
AND cctitle.CONCEPT_CODE = p.TITLECODE
LEFT JOIN
CTE AS ccbirthplace
ON ccbirthplace.DOMAIN = 'CITYCODE'
AND ccbirthplace.CONCEPT_CODE = p.PLACEOFBIRTH
LEFT JOIN
CTE AS ccsex
ON ccsex.DOMAIN = 'SEXXX'
AND ccsex.CONCEPT_CODE = p.SEXXXCODE
LEFT JOIN
CTE AS ccethnic
ON ccethnic.DOMAIN = 'ETHNGRP'
AND ccethnic.CONCEPT_CODE = p.ETHGRCODE
LEFT JOIN
CTE AS ccnation
ON ccnation.DOMAIN = 'NATIONALITY'
AND ccnation.CONCEPT_CODE = p.NATNLCODE
LEFT JOIN
CTE AS ccmarry
ON ccmarry.DOMAIN = 'MARITALSTATUS'
AND ccmarry.CONCEPT_CODE = p.MARRYCODE
LEFT JOIN
CTE AS ccrelig
ON ccrelig.DOMAIN = 'RELIG'
AND ccrelig.CONCEPT_CODE = p.RELIGCODE
/* nhs number verification status*/
LEFT JOIN
CTE_NHS AS nhsver
ON nhsver.lookupValue1 = p.PTRSTCODE
WHERE
--p.PASID = 'HEY0798884' and
p.STATUS = 'A'
AND DEATHDTTM IS NULL
AND dummy.LOCAL_PATIENT_NUMBER IS NULL
--and LZO_PATIENTID.IDENTIFIER is not null -- just for testing
/*
4 dupes LZO_PATIENTID
HEY3051715
HEY3142954
HEY3142341
HEY3143543
LEFT JOIN
LZO_PATIENTID AS pid
ON p.OID = pid.PATIENTOID
AND pid.PITYPCODE = 'CC_NATNLID'
AND pid.Status = 'A'
*/