Как получить уникальную запись с номером счета в SQL - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть такая таблица;теперь мне нужен отдельный номер счета с разделенным запятыми именем теста со всеми столбцами.Я пытаюсь выполнить этот запрос, но получаю ошибку.

В списке выбора можно указать только одно выражение, если подзапрос не введен с EXISTS

SELECT DISTINCT
    PTD.InvoiceNumber, PL.PatientName, PTD.TestDate, PTD.Discount, PTD.Commission,
    (SELECT SUM(TestAmount) AS TestAmount 
     FROM tb_Patienttestdetails
     WHERE PTD.InvoiceNumber = InvoiceNumber) AS TotalAmount,  
    (TotalAmount - (PTD.Commission + PTD.Discount)) AS RealAmount,
    PTD.Remark, PL.PatientId,    
    (SELECT DISTINCT
         t1.InvoiceNumber,
         STUFF((SELECT DISTINCT '' + t2.Testname 
                FROM tb_PatientTestDetails t2  
                WHERE t1.InvoiceNumber = t2.InvoiceNumber
                FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 0, '') TestName
     FROM
         tb_PatientTestDetails t1)   
FROM 
    tb_Patienttestdetails PTD 
INNER JOIN
    tb_PatientList PL ON PTD.PatientId = PL.Id

enter image description here

Ответы [ 2 ]

1 голос
/ 21 сентября 2019

Ответ кажется довольно очевидным.Этот подзапрос возвращает два столбца:

(SELECT DISTINCT
     t1.InvoiceNumber,
     STUFF((SELECT DISTINCT '' + t2.Testname 
            FROM tb_PatientTestDetails t2  
            WHERE t1.InvoiceNumber = t2.InvoiceNumber
            FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 0, '') TestName
 FROM
     tb_PatientTestDetails t1)   

Предположительно, вы намереваетесь что-то вроде этого:

SELECT PTD.InvoiceNumber, PL.PatientName, PTD.TestDate, PTD.Discount, PTD.Commission,
       SUM(PTD.TestAmount) AS TestAmount,
       SUM(PTD.TestAmount - (PTD.Commission + PTD.Discount)) AS RealAmount,
       PTD.Remark, PL.PatientId,    
       STUFF((SELECT DISTINCT '' + t2.Testname 
              FROM tb_PatientTestDetails ptd2 
              WHERE ptd.InvoiceNumber = ptd2.InvoiceNumber
              FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 0, ''
             )
            ) as tests 
FROM tb_PatientList PL JOIN
    tb_Patienttestdetails PTD 
    ON PTD.PatientId = PL.Id
GROUP BY PTD.InvoiceNumber, PL.PatientName, PTD.TestDate, PTD.Discount, PTD.Commission, PTD.Remark, PL.PatientId;
0 голосов
/ 23 сентября 2019

Проблема, решаемая этим кодом

SELECT PTD.InvoiceNumber, PL.PatientName, PTD.TestDate, PTD.Discount, PTD.Commission,
       SUM(PTD.TestAmount) AS TestAmount,
       SUM(PTD.TestAmount - (PTD.Commission + PTD.Discount)) AS RealAmount,
       PTD.Remark, PL.PatientId,   
      STUFF((SELECT distinct '' + t2.Testname from tb_PatientTestDetails t2  where PTD.InvoiceNumber = t2.InvoiceNumber FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,0,'') TestName  FROM tb_PatientList PL JOIN
    tb_Patienttestdetails PTD 
    ON PTD.PatientId = PL.Id GROUP BY PTD.InvoiceNumber, PL.PatientName, PTD.TestDate, PTD.Discount, PTD.Commission, PTD.Remark, PL.PatientId;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...