2013-06-03 6 views
0
select (select sc_machid as ClinicID, 
case 
    when substring(sc_machid,1,3)='BB0' then 'Head Office' 
    WHEN substring(sc_machid,1,3)='BA0' THEN 'HeadOffice' 
    when substring(sc_machid,1,3)='BA1' THEN 'Villiers' 
    when substring(sc_machid,1,3)='BA2' then 'Imperial IDC' 
    WHEN substring(sc_machid,1,3)='BA3' THEN 'Warden' 
    WHEN substring(sc_machid,1,3)='BA4' THEN 'Harrismith' 
    WHEN substring(sc_machid,1,3)='BA5' THEN 'Tugela' 
    WHEN substring(sc_machid,1,3)='BA6' THEN 'MooiRiver' 
    WHEN substring(sc_machid,1,3)='bad' THEN 'MooiRiver' 
    WHEN substring(sc_machid,1,3)='BB0' THEN 'Port Elizabeth' 
    WHEN substring(sc_machid,1,3)='BB1' THEN 'East London' 
    when substring(sc_machid,1,3)='BB2' THEN 'Umthatha' 
    when substring(sc_machid,1,3)='BB3' then 'Kokstad' 
    WHEN substring(sc_machid,1,3)='BB4' THEN 'Marian Hill' 
    WHEN substring(sc_machid,1,3)='BB5' THEN 'Zeerust' 
    WHEN substring(sc_machid,1,3)='BC0' THEN 'Imperial SBD' 
    WHEN substring(sc_machid,1,3)='BC1' THEN 'Imperial TSD' 
    WHEN substring(sc_machid,1,3)='BC2' THEN 'Roodekop' 
    WHEN substring(sc_machid,1,3)='BD0' THEN 'Ventersburg' 
    WHEN substring(sc_machid,1,3)='BD1' THEN 'Colesburg' 
    WHEN substring(sc_machid,1,3)='BD2' THEN 'Hanover' 
    WHEN substring(sc_machid,1,3)='BD3' THEN 'Beaufort West' 
    WHEN substring(sc_machid,1,3)='BD4' THEN 'Beit Bridge Border Post Musina' 
    WHEN substring(sc_machid,1,3)='BD5' THEN 'Cape Town - Epping' 
    WHEN substring(sc_machid,1,3)='BD7' THEN 'Komati Poort' 
    end as ClinicName, count(TransactionType) as NumberOfFirstTimePatientVisits 
    from sc_audit 
    where TransactionType = 'Insert Patient Record' 
    group by ClinicName) 
as t1, 
(
    select pat_id as PatientID, 
    count(*) as NumberOfVisits, 
    sc_clinicid as ClinicID, 
    CASE 
     WHEN sc_clinicid = 'BA0' THEN 'HeadOffice' 
     when sc_clinicid = 'BA1' THEN 'Villiers' 
     when sc_clinicid = 'BA2' then 'Imperial IDC' 
     WHEN sc_clinicid = 'BA3' THEN 'Warden' 
     WHEN sc_clinicid = 'BA4' THEN 'Harrismith' 
     WHEN sc_clinicid = 'BA5' THEN 'Tugela' 
     WHEN sc_clinicid = 'BA6' THEN 'MooiRiver' 
     WHEN sc_clinicid = 'bad' THEN 'MooiRiver' 
     WHEN sc_clinicid = 'BB0' THEN 'Port Elizabeth' 
     WHEN sc_clinicid = 'BB1' THEN 'East London' 
     when sc_clinicid = 'BB2' THEN 'Umthatha' 
     when sc_clinicid = 'BB3' then 'Kokstad' 
     WHEN sc_clinicid = 'BB4' THEN 'Marian Hill' 
     WHEN sc_clinicid = 'BB5' THEN 'Zeerust' 
     WHEN sc_clinicid = 'BC0' THEN 'Imperial SBD' 
     WHEN sc_clinicid = 'BC1' THEN 'Imperial TSD' 
     WHEN sc_clinicid = 'BC2' THEN 'Roodekop' 
     WHEN sc_clinicid = 'BD0' THEN 'Ventersburg' 
     WHEN sc_clinicid = 'BD1' THEN 'Colesburg' 
     WHEN sc_clinicid = 'BD2' THEN 'Hanover' 
     WHEN sc_clinicid = 'BD3' THEN 'Beaufort West' 
     WHEN sc_clinicid = 'BD4' THEN 'Beit Bridge Border Post Musina' 
     WHEN sc_clinicid = 'BD5' THEN 'Cape Town - Epping' 
     WHEN sc_clinicid = 'BD7' THEN 'Komati Poort' 
    end as ClinicName 
    from sc_queue 
    group by ClinicName 
) 
as t2; 

Этот запрос дает мне ошибку, которая говоритОперанд должен содержать 1column (ы)

Operand should contain 1column(s) 

Пожалуйста, помогите мне, я не могу показаться, чтобы выяснить, где проблема

+0

Похоже, что ваш внутренний выбор должен быть параметром первого выбора, а не выбранным столбцом. – Lidor

+0

что это за запрос? – diEcho

+0

Вы действительно должны создать [функцию] (http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html) для этих двух операторов case, считая, что они на самом деле должны быть одинаковыми. Кроме того, вы можете сказать 'CASE sc_clinicid WHEN ...' и удалить 'sc_clinicid =' всюду. – Dukeling

ответ

0

подзапрос SELECT sc_machid as ClinicID, ... дает три столбца (ClinicID, ClinicName, NumberOfFirstTimePatientVisits). Поэтому он не может быть частью выражения SELECT. Он должен быть частью предложения FROM. Сделайте это примерно так:

SELECT t1.ClinicID, t1.ClinicName, t1.NumberOfFirstTimePatientVisits 
FROM (SELECT sc_machid as ClinicID, ...) as t1 ... 

То же самое касается select pat_id as PatientID,count(*) as NumberOfVisits .... Объединить эти два используя

SELECT 
    t1.ClinicID, t1.ClinicName, t1.NumberOfFirstTimePatientVisits, 
    t2.PatientID, t2.NumberOfVisits, t2.ClinicID, t2.ClinicName 
FROM 
    (
     SELECT 
      sc_machid AS ClinicID, 
      CASE 
       WHEN SUBSTRING (sc_machid,1,3)='BB0' THEN 'Head Office' 
       -- ... 
      END AS ClinicName, 
      COUNT(TransactionType) AS NumberOfFirstTimePatientVisits 
     FROM sc_audit 
     WHERE TransactionType = 'Insert Patient Record' 
     GROUP BY ClinicName 
    ) AS t1, 
    (
     SELECT 
      pat_id AS PatientID, 
      count(*) AS NumberOfVisits, 
      sc_clinicid AS ClinicID, 
      CASE 
       WHEN sc_clinicid = 'BA0' THEN 'HeadOffice' 
       -- ... 
      END AS ClinicName 
     FROM sc_queue 
    ) AS t2 

Подзапрос может быть лишь частью выражения SELECT, если она возвращает одну запись с одной колонкой. Если она возвращает одну запись с несколькими столбцами, вы получите сообщение об ошибке

# 1242 - подзапрос возвращает более 1 строки

+0

Обратите внимание, что это только исправляет ваши синтаксические ошибки. Думаю, вы также хотите добавить условие 'WHERE'' t1.ClinicID = t2.ClinicID'. – Oswald

0

Ваш t2 столбец возвращает более одной записи PatientID, NumberOfVisits, sc_clinicid.... которых не допускается , вы можете добавить только 1 столбец в свой внутренний запрос, когда вы добавляете этот запрос в качестве результата столбца.

Проверить эту скрипку я попытался Inact своей ошибки в запросе FIDDLE

0

В t2 вы выбираете более одного столбец, а затем назначить псевдоним, что является неправильным. Попробуйте выбрать один столбец, он будет работать. Проблема в том, что вы выбираете несколько столбцов как один столбец.

select (select sc_machid as ClinicID, 
case 
    when substring(sc_machid,1,3)='BB0' then 'Head Office' 
    WHEN substring(sc_machid,1,3)='BA0' THEN 'HeadOffice' 
    when substring(sc_machid,1,3)='BA1' THEN 'Villiers' 
    when substring(sc_machid,1,3)='BA2' then 'Imperial IDC' 
    WHEN substring(sc_machid,1,3)='BA3' THEN 'Warden' 
    WHEN substring(sc_machid,1,3)='BA4' THEN 'Harrismith' 
    WHEN substring(sc_machid,1,3)='BA5' THEN 'Tugela' 
    WHEN substring(sc_machid,1,3)='BA6' THEN 'MooiRiver' 
    WHEN substring(sc_machid,1,3)='bad' THEN 'MooiRiver' 
    WHEN substring(sc_machid,1,3)='BB0' THEN 'Port Elizabeth' 
    WHEN substring(sc_machid,1,3)='BB1' THEN 'East London' 
    when substring(sc_machid,1,3)='BB2' THEN 'Umthatha' 
    when substring(sc_machid,1,3)='BB3' then 'Kokstad' 
    WHEN substring(sc_machid,1,3)='BB4' THEN 'Marian Hill' 
    WHEN substring(sc_machid,1,3)='BB5' THEN 'Zeerust' 
    WHEN substring(sc_machid,1,3)='BC0' THEN 'Imperial SBD' 
    WHEN substring(sc_machid,1,3)='BC1' THEN 'Imperial TSD' 
    WHEN substring(sc_machid,1,3)='BC2' THEN 'Roodekop' 
    WHEN substring(sc_machid,1,3)='BD0' THEN 'Ventersburg' 
    WHEN substring(sc_machid,1,3)='BD1' THEN 'Colesburg' 
    WHEN substring(sc_machid,1,3)='BD2' THEN 'Hanover' 
    WHEN substring(sc_machid,1,3)='BD3' THEN 'Beaufort West' 
    WHEN substring(sc_machid,1,3)='BD4' THEN 'Beit Bridge Border Post Musina' 
    WHEN substring(sc_machid,1,3)='BD5' THEN 'Cape Town - Epping' 
    WHEN substring(sc_machid,1,3)='BD7' THEN 'Komati Poort' 
    end as ClinicName, count(TransactionType) as NumberOfFirstTimePatientVisits 
    from sc_audit 
    where TransactionType = 'Insert Patient Record' 
    group by ClinicName) 
as t1, 
(
    CASE 
     WHEN sc_clinicid = 'BA0' THEN 'HeadOffice' 
     when sc_clinicid = 'BA1' THEN 'Villiers' 
     when sc_clinicid = 'BA2' then 'Imperial IDC' 
     WHEN sc_clinicid = 'BA3' THEN 'Warden' 
     WHEN sc_clinicid = 'BA4' THEN 'Harrismith' 
     WHEN sc_clinicid = 'BA5' THEN 'Tugela' 
     WHEN sc_clinicid = 'BA6' THEN 'MooiRiver' 
     WHEN sc_clinicid = 'bad' THEN 'MooiRiver' 
     WHEN sc_clinicid = 'BB0' THEN 'Port Elizabeth' 
     WHEN sc_clinicid = 'BB1' THEN 'East London' 
     when sc_clinicid = 'BB2' THEN 'Umthatha' 
     when sc_clinicid = 'BB3' then 'Kokstad' 
     WHEN sc_clinicid = 'BB4' THEN 'Marian Hill' 
     WHEN sc_clinicid = 'BB5' THEN 'Zeerust' 
     WHEN sc_clinicid = 'BC0' THEN 'Imperial SBD' 
     WHEN sc_clinicid = 'BC1' THEN 'Imperial TSD' 
     WHEN sc_clinicid = 'BC2' THEN 'Roodekop' 
     WHEN sc_clinicid = 'BD0' THEN 'Ventersburg' 
     WHEN sc_clinicid = 'BD1' THEN 'Colesburg' 
     WHEN sc_clinicid = 'BD2' THEN 'Hanover' 
     WHEN sc_clinicid = 'BD3' THEN 'Beaufort West' 
     WHEN sc_clinicid = 'BD4' THEN 'Beit Bridge Border Post Musina' 
     WHEN sc_clinicid = 'BD5' THEN 'Cape Town - Epping' 
     WHEN sc_clinicid = 'BD7' THEN 'Komati Poort' 
    end as ClinicName 
    from sc_queue 
    group by ClinicName 
) 
as t2, 
(select pat_id as PatientID,   
    from sc_queue 
    group by ClinicName) as t3, 
(select count(*) as NumberOfVisits,   
    from sc_queue 
    group by ClinicName) as t4, 
(select sc_clinicid as ClinicID,   
    from sc_queue 
    group by ClinicName) as t5;