Создание результата для просмотра одного вывода с использованием двух операторов выбора, в которых есть оператор where - PullRequest
0 голосов
/ 08 октября 2018

Я начинаю запрос с select (table1) и в итоге получаю операторы where, а затем снова начинаю с select (table2) с оператором where. Пожалуйста, посмотрите на изображение и дайте мне знать, как это сделать. Спасибо

Запрос ниже и выходные данные, которые я получаю, также ниже.

--//1st select statement //

SELECT
    Measure          = CASE WHEN abd.dosiqID = 'A321'
                                THEN 'C-DIFF'
                           WHEN abd.dosiqID = 'B43'
                               THEN 'MRSA'
                           WHEN abd.dosiqID = 'bill'
                               THEN 'CAUTI'
                           WHEN abd.dosiqID = 'rewq'
                               THEN 'CLABSI'
                       END
    ,SoundPatients   = ram.AccountNumber
    ,DIAG            = abd.dosiqID
    ,SoundPhysicians = rapd.Admitid
    ,LenOfStay       = (CASE WHEN ram.AdmitDateTime IS NULL
                                 THEN 1
                            WHEN DATEDIFF(DAY, ram.AdmitDateTime, COALESCE(vd.DischargeDateTime, GETDATE())) < 1
                                THEN 1
                            ELSE DATEDIFF(DAY, ram.AdmitDateTime, COALESCE(vd.DischargeDateTime, GETDATE()))
                        END
                       )
    ,Pt_Status       = ram.RegistID
INTO sphy
FROM livefdb.dbo.REVERGE_REG     ram
LEFT JOIN livefdb.dbo.ReProrData p ON p.SourceID = ram.SourceID
                                       AND p.VisitID = ram.VisitID
LEFT JOIN livefdb.dbo.HiData     vd ON vd.SourceID = ram.SourceID
                                        AND vd.PatientID = ram.PatientID
                                        AND vd.VisitID = ram.VisitID
                                        AND vd.VisitType_MisRegTypeID = ram.RegistID
JOIN Abgnes                      abd ON abd.SourceID = ram.SourceID
                                         AND abd.VisitID = ram.VisitID
JOIN ReProrData                  rapd ON rapd.SourceID = ram.SourceID
                                          AND rapd.VisitID = ram.VisitID
LEFT OUTER JOIN AbsAcct_Main     abm ON abm.SourceID = ram.SourceID
                                         AND abm.VisitID = ram.VisitID
WHERE
    CAST(ram.AdmitDateTime AS DATE) BETWEEN '20180401' AND '20180930'
    AND ram.Facility_MisFacID IN ('mha', 'bha')
    AND abd.dosiqID IN ('999.32', '996.64', '041.12', '008.45', 'A321', 'B43', 'bill', 'rewq')
    AND rapd.Admitid IN ('DOC1', 'DOC2', 'DOC3', 'DOC4', 'DOC5', 'DOC6', 'DOC7', 'DOC8', 'DOC9')
    AND ram.RegistID IN ('IN', 'INO')


--//2nd select statement //

SELECT
    Measure          = CASE WHEN abd.dosiqID = 'A321'
                                THEN 'C-DIFF'
                           WHEN abd.dosiqID = 'B43'
                               THEN 'MRSA'
                           WHEN abd.dosiqID = 'bill'
                               THEN 'CAUTI'
                           WHEN abd.dosiqID = 'rewq'
                               THEN 'CLABSI'
                       END
    ,TotalPatients   = ram.AccountNumber
    ,DIAG            = abd.dosiqID
    ,SoundPhysicians = rapd.Admitid
    ,LenOfStay       = (CASE WHEN ram.AdmitDateTime IS NULL
                                 THEN 1
                            WHEN DATEDIFF(DAY, ram.AdmitDateTime, COALESCE(vd.DischargeDateTime, GETDATE())) < 1
                                THEN 1
                            ELSE DATEDIFF(DAY, ram.AdmitDateTime, COALESCE(vd.DischargeDateTime, GETDATE()))
                        END
                       )
    ,Pt_Status       = ram.RegistID
INTO sphy2
FROM livefdb.dbo.REVERGE_REG     ram
LEFT JOIN livefdb.dbo.ReProrData p ON p.SourceID = ram.SourceID
                                       AND p.VisitID = ram.VisitID
LEFT JOIN livefdb.dbo.HiData     vd ON vd.SourceID = ram.SourceID
                                        AND vd.PatientID = ram.PatientID
                                        AND vd.VisitID = ram.VisitID
                                        AND vd.VisitType_MisRegTypeID = ram.RegistID
JOIN Abgnes                      abd ON abd.SourceID = ram.SourceID
                                         AND abd.VisitID = ram.VisitID
JOIN ReProrData                  rapd ON rapd.SourceID = ram.SourceID
                                          AND rapd.VisitID = ram.VisitID
WHERE
    CAST(ram.AdmitDateTime AS DATE) BETWEEN '20180401' AND '20180930'
    AND ram.Facility_MisFacID IN ('mha', 'bha')
    AND abd.dosiqID IN ('A321', 'B43', 'bill', 'rewq')
    AND ram.RegistID IN ('IN', 'INO')


DROP TABLE sphy
DROP TABLE sphy2

END 
GO  

Агрегированные запросы по промежуточным результатам:

SELECT
    Measure
    ,SoundPatients    = COUNT(*)
    ,TotalPatientDays = SUM(LenOfStay)
FROM Sphy
GROUP BY Measure
ORDER BY Measure

SELECT
    Measure
    ,TotalPatients    = COUNT(*)
    ,TotalPatientDays = SUM(LenOfStay)
FROM Sphy2
GROUP BY Measure
ORDER BY Measure

Токовые выходы:

Measure    SoundPatients    TotalPatientDays
CLABSI         6                   49 
MRSA          33                  219

Measure  TotalPatients    TotalPatientDays
CLABSI      6                49
MRSA        44               290

Мой желаемый вывод:

Measure    SoundPatients    TotalPatients   TotalPatientDays
CLABSI        6                6                49
MRSA          33               44               290

** Пожалуйста, помните, что мне нужно количество данных и сумма lenofstay.и дайте мне знать, если какие-либо дополнительные вопросы или вопросы, и помогите мне в этом **

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Вы можете объединить два результата в поле Measure.Поскольку sphy представляется подмножеством sphy2, объединение должно использовать все записи со стороны sphy2:

WITH
  output1 (Measure, SoundPatients, TotalPatientDays) AS (
    SELECT Measure, COUNT(*), SUM(LenOfStay) FROM Sphy
    GROUP BY Measure
  ),
  output2 (Measure, TotalPatients, TotalPatientDays) AS (
    SELECT Measure, COUNT(*), SUM(LenOfStay) FROM Sphy2
    GROUP BY Measure
  )
SELECT o2.Measure, o1.SoundPatients, o2.TotalPatients, o2.TotalPatientDays
FROM output2 o2
  LEFT OUTER JOIN output1 o1 ON o2.Measure = o1.Measure
ORDER BY o2.Measure;
0 голосов
/ 08 октября 2018

Отсутствие логики,

select t1.Measure,
 t1.SoundPatients,
 t2.TotalPatients,
 iif ( t1.TotalPatientsDays > t2.TotalPatientsDays ,t1.TotalPatientsDays ,
       t2.TotalPatientsDays
     ) 
 TotalPatientsDays
from   table1 t1
left join table2 t2 on t1.Measure = t2.Measure

Редактировать 1:

;with o1 as (
 -- your query
)
,o2 as (
 -- your query
)select * into o from o1 join o2 on o1.id = o2.id

declare @server varchar (max) = @@SERVERNAME -- server name has been taken dynamically.
, @sql nvarchar(max)
set @sql = 'exec master..xp_cmdshell ''bcp trainee1.dbo.o out "path\smph_SoundPhy2.csv" -c -t, -T -S "' + @server +  '"''' -- here your DB name and path
print @sql
exec sp_executesql @sql
...