I am going to summarize my schema and the result that I need:
Table A(released and rejected):
day, specimenid, status,bunch of other unneeded fields....
1,AA123, released
1,AA132, released
2,BB234, rejected
3,BB444, released
3,AA444, rejected
Table B(pending):
day, specimenid, bunch of other unneeded columns
1, BB333
1, H234
2, C333
3, F333
Result that I need:
day, count, status
1, 2, released
1, 2, pending
2, 1, rejected
2, 1, pending
3, 1, released
3, 1, rejected
3, 1, pending
another words, for every day, i need to get the total count for each status.
I am doing this:
select day, count(specimenid) from tableA where status='released', 'released'
union all
select day, count(specimenid) from tableA where status='rejected', 'rejected'
union all
select day, count(specimenid) from tableB, 'pending'
It’s working for now but I think it might be a little sloppy.
Here’s my full monster query for this:
WITH cte(rejected) AS (SELECT DISTINCT [Specimen ID]
FROM dbo.QuickLabDump
WHERE (Outcome = 'REJECTED') AND ([Specimen ID] IS NOT NULL))
SELECT CONVERT(VARCHAR(8), a.[Date Entered], 1) AS [Full Date], DATEPART(yy, a.[Date Entered]) AS [Year Entered], LEFT(DATENAME(MONTH, a.[Date Entered]), 3)
AS [Month Entered], DATEPART(dd, a.[Date Entered]) AS [Day Entered], CASE WHEN DATEPART(WEEKDAY, [DATE entered])
= 1 THEN 'Sun' WHEN DATEPART(WEEKDAY, [DATE entered]) = 2 THEN 'Mon' WHEN DATEPART(WEEKDAY, [DATE entered])
= 3 THEN 'Tus' WHEN DATEPART(WEEKDAY, [DATE entered]) = 4 THEN 'Wed' WHEN DATEPART(WEEKDAY, [DATE entered])
= 5 THEN 'Thu' WHEN DATEPART(WEEKDAY, [DATE entered]) = 6 THEN 'Fri' WHEN DATEPART(WEEKDAY, [DATE entered]) = 7 THEN 'Sat' END AS DOW,
CONVERT(VARCHAR(8), DATEADD(D, - (1 * DATEPART(dw, a.[Date Entered])) + 6, a.[Date Entered]), 1) AS [Week Ending], COUNT(DISTINCT a.[Specimen ID])
AS CountAccns, c.SALESREP AS [Sales Rep], c.NPI AS MLNPI, e.NPIb AS IMSNPI, e.SpecialtyPrimaryCodeb AS [IMS Specialty Primary Code],
sm1.specialtydesc as [Specialty Primary Description],
e.SpecialtySecondaryCodeb AS [IMS Specialty Secondary Code],
sm2.specialtydesc as [Specialty Secondary Description],
e.SpecialtyTertiaryCodeb AS [IMS Specialty Tertiary Code],
sm3.specialtydesc as [Specialty Tertiary Description],
e.ProfessionalID1b AS [IMS Professional ID 1], a.[Requesting Physician] AS Physician, a.[Practice Code], b.[MLIS Practice ID] AS [MLIS Code], a.[Practice Name],
c.DATEESTABLISHED AS [Date Established], c.PRACTICEADDRESS1 AS Address, c.PRACTICEADDRESS2 AS Address2, c.PRACTICECITY AS City,
c.PRACTICESTATE AS State, d.[MLIS Status] AS Status, MAX(a.[Order Count]) AS [order count],
'Released' as [Release Status]
FROM dbo.QuickLabDump AS a LEFT OUTER JOIN
dbo.qlmlismapping AS b ON b.[Quicklab ID] = a.[Practice Code] LEFT OUTER JOIN
dbo.PracticeandPhysician AS c ON a.[Requesting Physician] = c.DOCTORFIRSTNAME + ' ' + c.DOCTORLASTNAME AND
a.[Practice Code] = c.PRACTICECODE LEFT OUTER JOIN
dbo.IMSData AS e ON c.NPI = e.NPIb LEFT OUTER JOIN
dbo.QLMLISInfo AS d ON b.[MLIS Practice ID] = d.[MLIS Practice ID]
left outer JOIN
dbo.SpecialtyMapping sm1 ON e.SpecialtyPrimaryCodeb = sm1.specialtyabbrev
left outer JOIN
dbo.SpecialtyMapping sm2 ON e.SpecialtySecondaryCodeb = sm2.specialtyabbrev
left outer JOIN
dbo.SpecialtyMapping sm3 ON e.SpecialtyTertiaryCodeb = sm3.specialtyabbrev
WHERE (a.[Date Entered] > '20110101') AND (NOT EXISTS
(SELECT 1 AS Expr1
FROM cte AS cte_1
WHERE (rejected = a.[Specimen ID]))) AND (NOT EXISTS
(SELECT 1 AS Expr1
FROM dbo.PendingSpecimens
WHERE ([Specimen ID] = a.[Specimen ID])))
GROUP BY a.[Date Entered], c.SALESREP, c.NPI, e.NPIb, e.SpecialtyPrimaryCodeb, e.SpecialtySecondaryCodeb, e.SpecialtyTertiaryCodeb, e.ProfessionalID1b,
a.[Requesting Physician], a.[Practice Code], b.[MLIS Practice ID], a.[Practice Name], c.DATEESTABLISHED, c.PRACTICEADDRESS1, c.PRACTICEADDRESS2,
c.PRACTICECITY, c.PRACTICESTATE, d.[MLIS Status],sm1.specialtydesc,sm2.specialtydesc,sm3.specialtydesc
union all
select
CONVERT(VARCHAR(8), a.[Date Entered], 1) AS [Full Date],
DATEPART(yy, a.[Date Entered]) AS [Year Entered],
LEFT(DATENAME(MONTH, a.[Date Entered]), 3) AS [Month Entered],
DATEPART(dd, a.[Date Entered]) AS [Day Entered],
CASE WHEN DATEPART(WEEKDAY, [DATE entered])
= 1 THEN 'Sun' WHEN DATEPART(WEEKDAY, [DATE entered]) = 2 THEN 'Mon' WHEN DATEPART(WEEKDAY, [DATE entered])
= 3 THEN 'Tus' WHEN DATEPART(WEEKDAY, [DATE entered]) = 4 THEN 'Wed' WHEN DATEPART(WEEKDAY, [DATE entered])
= 5 THEN 'Thu' WHEN DATEPART(WEEKDAY, [DATE entered]) = 6 THEN 'Fri' WHEN DATEPART(WEEKDAY, [DATE entered]) = 7 THEN 'Sat' END AS DOW,
CONVERT(VARCHAR(8), DATEADD(D, - (1 * DATEPART(dw, a.[Date Entered])) + 6, a.[Date Entered]), 1) AS [Week Ending],
COUNT(DISTINCT a.[Specimen ID]) AS CountAccns,
null AS [Sales Rep],
null AS MLNPI,
null AS IMSNPI,
null AS [IMS Specialty Primary Code],
null as [Specialty Primary Description],
null AS [IMS Specialty Secondary Code],
null as [Specialty Secondary Description],
null AS [IMS Specialty Tertiary Code],
null as [Specialty Tertiary Description],
null AS [IMS Professional ID 1],
null as Physician,
SUBSTRING(agency,1,charindex(' - ',agency,1)-1) as [Practice Code],
b.[MLIS Practice ID] AS [MLIS Code],
SUBSTRING(agency,charindex(' - ',agency,1)+3,len(agency)) as [Practice Name],
c.DATEESTABLISHED AS [Date Established],
c.PRACTICEADDRESS1 AS Address,
c.PRACTICEADDRESS2 AS Address2,
c.PRACTICECITY AS City,
c.PRACTICESTATE AS State,
d.[MLIS Status] AS Status,
null AS [order count],
'Pending' as [Release Status]
from dbo.pendingspecimens AS a LEFT OUTER JOIN
dbo.qlmlismapping AS b ON b.[Quicklab ID] = SUBSTRING(agency,1,charindex(' - ',agency,1))
LEFT OUTER JOIN
dbo.PracticeandPhysician AS c ON SUBSTRING(agency,1,charindex(' - ',agency,1)) = c.PRACTICECODE LEFT OUTER JOIN
dbo.IMSData AS e ON c.NPI = e.NPIb LEFT OUTER JOIN
dbo.QLMLISInfo AS d ON b.[MLIS Practice ID] = d.[MLIS Practice ID]
WHERE (a.[Date Entered] > '20110101')
group by agency,a.[Date Entered], c.SALESREP, c.NPI, e.NPIb, e.SpecialtyPrimaryCodeb, e.SpecialtySecondaryCodeb, e.SpecialtyTertiaryCodeb, e.ProfessionalID1b,
b.[MLIS Practice ID], c.DATEESTABLISHED, c.PRACTICEADDRESS1, c.PRACTICEADDRESS2,
c.PRACTICECITY, c.PRACTICESTATE, d.[MLIS Status]
union all
SELECT CONVERT(VARCHAR(8), a.[Date Entered], 1) AS [Full Date], DATEPART(yy, a.[Date Entered]) AS [Year Entered], LEFT(DATENAME(MONTH, a.[Date Entered]), 3)
AS [Month Entered], DATEPART(dd, a.[Date Entered]) AS [Day Entered], CASE WHEN DATEPART(WEEKDAY, [DATE entered])
= 1 THEN 'Sun' WHEN DATEPART(WEEKDAY, [DATE entered]) = 2 THEN 'Mon' WHEN DATEPART(WEEKDAY, [DATE entered])
= 3 THEN 'Tus' WHEN DATEPART(WEEKDAY, [DATE entered]) = 4 THEN 'Wed' WHEN DATEPART(WEEKDAY, [DATE entered])
= 5 THEN 'Thu' WHEN DATEPART(WEEKDAY, [DATE entered]) = 6 THEN 'Fri' WHEN DATEPART(WEEKDAY, [DATE entered]) = 7 THEN 'Sat' END AS DOW,
CONVERT(VARCHAR(8), DATEADD(D, - (1 * DATEPART(dw, a.[Date Entered])) + 6, a.[Date Entered]), 1) AS [Week Ending], COUNT(DISTINCT a.[Specimen ID])
AS CountAccns, c.SALESREP AS [Sales Rep], c.NPI AS MLNPI, e.NPIb AS IMSNPI, e.SpecialtyPrimaryCodeb AS [IMS Specialty Primary Code],
sm1.specialtydesc as [Specialty Primary Description],
e.SpecialtySecondaryCodeb AS [IMS Specialty Secondary Code],
sm2.specialtydesc as [Specialty Secondary Description],
e.SpecialtyTertiaryCodeb AS [IMS Specialty Tertiary Code],
sm3.specialtydesc as [Specialty Tertiary Description],
e.ProfessionalID1b AS [IMS Professional ID 1], a.[Requesting Physician] AS Physician, a.[Practice Code], b.[MLIS Practice ID] AS [MLIS Code], a.[Practice Name],
c.DATEESTABLISHED AS [Date Established], c.PRACTICEADDRESS1 AS Address, c.PRACTICEADDRESS2 AS Address2, c.PRACTICECITY AS City,
c.PRACTICESTATE AS State, d.[MLIS Status] AS Status, MAX(a.[Order Count]) AS [order count],
'Rejected' as [Release Status]
FROM dbo.QuickLabDump AS a LEFT OUTER JOIN
dbo.qlmlismapping AS b ON b.[Quicklab ID] = a.[Practice Code] LEFT OUTER JOIN
dbo.PracticeandPhysician AS c ON a.[Requesting Physician] = c.DOCTORFIRSTNAME + ' ' + c.DOCTORLASTNAME AND
a.[Practice Code] = c.PRACTICECODE LEFT OUTER JOIN
dbo.IMSData AS e ON c.NPI = e.NPIb LEFT OUTER JOIN
dbo.QLMLISInfo AS d ON b.[MLIS Practice ID] = d.[MLIS Practice ID]
left outer JOIN
dbo.SpecialtyMapping sm1 ON e.SpecialtyPrimaryCodeb = sm1.specialtyabbrev
left outer JOIN
dbo.SpecialtyMapping sm2 ON e.SpecialtySecondaryCodeb = sm2.specialtyabbrev
left outer JOIN
dbo.SpecialtyMapping sm3 ON e.SpecialtyTertiaryCodeb = sm3.specialtyabbrev
join cte on cte.rejected=a.[Specimen ID]
WHERE (a.[Date Entered] > '20110101')
GROUP BY a.[Date Entered], c.SALESREP, c.NPI, e.NPIb, e.SpecialtyPrimaryCodeb, e.SpecialtySecondaryCodeb, e.SpecialtyTertiaryCodeb, e.ProfessionalID1b,
a.[Requesting Physician], a.[Practice Code], b.[MLIS Practice ID], a.[Practice Name], c.DATEESTABLISHED, c.PRACTICEADDRESS1, c.PRACTICEADDRESS2,
c.PRACTICECITY, c.PRACTICESTATE, d.[MLIS Status],sm1.specialtydesc,sm2.specialtydesc,sm3.specialtydesc
I really don’t think I should be doing UNION ALL, but instead structuring the query in a smarter way. Can you please help me simplify the query so that I dont need to do UNION ALLs?
What about?
If you have more than those 2 status in TableA you can add a
whereclause to filter them.I don’t think you can run away from the
union. The records are in different tables and you need to get them from both of them.Also it is a
unionnot aunion all. The latter will remove duplicates and will take more to perform. We don’t needit because there are no duplicates in the queries I wrote… I can’t promise anything about the huge stuff you pasted in the question 😛