2013-03-12 3 views
-1

Я редактирую код из FireBird в SQL Server 2008, и у меня проблема с синтаксисом. Я не уверен, где ошибка. Я не писал этот код, и я не совсем понимаю на SQL Server, поэтому мне нужен совет.SQL Server 2008 - Неправильный синтаксис

select * 
from(
    select A.*,floor(Hotove) Hotove,floor(Rozpracovane) Rozpracovane,floor(buffer) buffer from (
    select typ,min(ID) ID , 
    convert(varchar(10), cast(min(case when PocetDnuMy<>-1000 then Dat2 else 
    cast(Dateadd(year, 5, getDate()) as float) end) as datetime), 104) Datum, 
    min(dat2) dat2, min(Description) Description, 
    min(Rada) Rada, min(CisloDokladu) CisloDokladu, 
    min(JmenoFirmy) JmenoFirmy, min(Produkt) Produkt, 
    min(CastProduktu) CastProduktu, min(ResStrana) ResStrana, 
    Resitel, min(IC) IC, min(ICID) ICID, 
    case when max(PocetDnuMy)>182 then 'color: red;font-weight:bold;Text-decoration:underline' 
     when max(PocetDnuMy)>10 then 'color: red;font-weight:bold' 
     when max(PocetDnuMy)>0 then 'color: red' 
     when max(PocetDnuMy)<0 then 'color: green' 
    end Color, 
    count(ID) Pocet, max(PocetDnuMy) NejviceMy, 
    sum(case when PocetDnuMy>0 then PocetDnuMy else 0 end) CelkemDnuMy, 
    ResitelID, sum(case when PocetDnuMy>0 then 1 else 0 end) PocetProdleni 
from( 
select 'b' typ, 
     DVB.id as Id, 
     convert(varchar(10), cast(DVB.[DocDate$DATE] as datetime), 104) as Datum, 
     DVB.[DocDate$DATE] Dat2, 
     DVB.ShortDesc AS Description, 
     DQ.code as Rada, 
     DVB.ordnumber as CisloDokladu, 
     F.name as JmenoFirmy, 
     DVPR.Code as Produkt, 
     DVPA.Code as CastProduktu, 
     case 
     when (US.userstatuscode='Čeká se na řešitele')or 
       (US.userstatuscode='Nezač.-Čeká na přiděl.řešitel')or 
       (US.userstatuscode='Odsouhlaseno zákazníkem') 
     then cast(getDate() as float)-DVB.[DocDate$DATE] 
     else -1000 
     end  PocetDnuMy, 
     case 
     when (US.userstatuscode='Čeká se na řešitele')or 
       (US.userstatuscode='Nezač.-Čeká na přiděl.řešitel')or 
       (US.userstatuscode='Odsouhlaseno zákazníkem') 
     then 0 
     else cast(getDate() as float)-DVB.DocDate$DATE 
     end  PocetDnuoni, 
     CONVERT(VARCHAR(4),cast(DVB.[DocDate$DATE] as datetime),112) test2, 
     case 
     when (US.userstatuscode='Čeká se na řešitele')or 
       (US.userstatuscode='Nezač.-Čeká na přiděl.řešitel')or 
       (US.userstatuscode='Odsouhlaseno zákazníkem') 
     then 'flores.png' 
     else 'nopic.jpg' 
     end AS ResStrana, 
     SU.Name AS Resitel, 
     SU.ID as ResitelID, 
     case 
     when LEFT(DVB.X_Zkratka2, 1)='C' then DVB.X_Zkratka2 
     when LEFT(DVB.X_Zkratka2, 1)<>'C' then '' 
     end AS IC, 
     RIGHT(DVB.X_Zkratka2, 6) AS ICID 
from DEVBUGS DVB 
join devproducts AS DVPR on DVB.Product_ID=DVPR.ID 
join devparts AS DVPA on DVB.Part_ID=DVPA.ID and CHARINDEX('H',DVPA.Code)<>1 
join userstatuses US on DVB.status_id=US.id 
join periods P on DVB.period_id=P.id 
join docqueues DQ on DVB.docqueue_id=DQ.id and DQ.Code<>'POZ' 
join firms F on DVB.firm_id=F.id 
join SecurityUsers AS SU on DVB.ResponsibleUser_ID=SU.ID 
where 
    (US.userstatuscode<>'Hotovo' and 
    US.userstatuscode<>'Uzamčeno' and 
    US.userstatuscode<>'Odloženo' and 
    US.userstatuscode<>'Zamítnuto') 
AND (DVPA.Code='A' or DVPA.Code='B' or DVPA.Code='C' or DVPA.Code='HA' or DVPA.Code='HB' or DVPA.Code='HC' or DVPA.Code='Z' or DVPA.Code='OBJ' or DVPA.Code='-')) B 
group by Resitel,ResitelID, typ) A 
left outer join (SELECT sum(A.X_Ef_Cas) EfCas,sum(A.X_Ef_Cas*Pomer) HodPrem,A.Worker_ID, 
    sum(case when ((S.UserStatusCode in ('Hotovo','Uzamčeno','Zamítnuto')) or D.X_Zkratka2='Telefonista') then A.X_Ef_Cas*Pomer else 0 end) Hotove, 
    sum(case when ((S.UserStatusCode in ('Hotovo','Uzamčeno','Zamítnuto')) or D.X_Zkratka2='Telefonista') then 0 else A.X_Ef_Cas*Pomer end) Rozpracovane 
FROM DevBugs as D 
    join DevTimeRecords A on D.id =A.DevDocument_ID 
    JOIN UserStatuses as S ON S.ID = D.Status_ID 
    join DevProducts DP ON DP.ID=D.Product_ID 
    join devparts AS DVPA on D.Part_ID=DVPA.ID and CHARINDEX('H',DVPA.Code)<>1 
    join 
    (select D.ID,case when sum(A.X_Ef_Cas)>EstimatedTime then EstimatedTime/sum(A.X_Ef_Cas) else 1 end Pomer 
    FROM DevBugs as D 
    join DevTimeRecords A on D.id =A.DevDocument_ID 
    join DevProducts DP ON DP.ID=D.Product_ID 
     WHERE x_PremieObd=0 
     and (CHARINDEX('Cestovné Km', D.ShortDesc)<=0) 
     and (CHARINDEX('Čas na cestě', D.ShortDesc)<=0) 
     and (CHARINDEX('ST', D.X_Zkratka2)<>1) 
     and (D.X_Zkratka2<> 'RE') 
     and DP.Code in ('ZP','SI','FLORES') 
     and (DP.Code<>'FLORES' or (DP.Code='FLORES' and not A.Worker_ID in ('DD00000101','FD00000101'))) 
    group by D.ID,D.EstimatedTime) Pomery on Pomery.ID=D.ID 
    WHERE  
     (D.X_Zkratka2<> 'RE') 
     and (CHARINDEX('Cestovné Km', D.ShortDesc)<=0) 
     and (CHARINDEX('Čas na cestě', D.ShortDesc)<=0) 
     and (CHARINDEX('ST', D.X_Zkratka2)<>1) 
     and DP.Code in ('ZP','SI','FLORES') 
     and (DP.Code<>'FLORES' or (DP.Code='FLORES' and not A.Worker_ID in ('DD00000101','FD00000101'))) 
    and x_PremieObd=0 
    group by Worker_ID) premie on Worker_ID=ResitelID 
left outer join (select sum(buffer) buffer,ResponsibleUser_ID from 
    (select D.ID, ResponsibleUser_ID, case when (sum(A.X_Ef_Cas)>EstimatedTime) then 0 when sum(A.X_Ef_Cas)is null then EstimatedTime else (EstimatedTime- sum(A.X_Ef_Cas)) end buffer 
    FROM DevBugs as D 
    left outer join DevTimeRecords A on D.id =A.DevDocument_ID 
    join DevProducts DP ON DP.ID=D.Product_ID 
    join userstatuses US on D.status_id=US.id 
    join devparts AS DVPA on D.Part_ID=DVPA.ID and CHARINDEX('H',DVPA.Code)<>1 
     WHERE 
     (CHARINDEX('Cestovné Km', D.ShortDesc)<=0) 
     and (CHARINDEX('Čas na cestě', D.ShortDesc)<=0) 
     and (CHARINDEX('ST', D.X_Zkratka2)<>1) 
     and (D.X_Zkratka2<> 'RE') 
     and D.X_Zkratka2<>'Telefonista' 
     and DP.Code in ('ZP','SI','FLORES') 
     and (DP.Code<>'FLORES' or (DP.Code='FLORES' and not A.Worker_ID in ('DD00000101','FD00000101'))) 
    and 
    US.userstatuscode<>'Hotovo' and 
    US.userstatuscode<>'Uzamčeno' and 
    US.userstatuscode<>'Odloženo' and 
    US.userstatuscode<>'Zamítnuto' 
group by D.ID, D.ResponsibleUser_ID, D.EstimatedTime) 
group by ResponsibleUser_ID) buffer on buffer.ResponsibleUser_ID =ResitelID 
union all 
select 'a' typ, 
     DVB.id as Id, 
     convert(varchar(10), cast(DVB.[DocDate$DATE] as datetime), 104) as Datum, 
     DVB.[DocDate$DATE] Dat2, 
     DVB.ShortDesc AS Description, 
     DQ.code as Rada, 
     DVB.ordnumber as CisloDokladu, 
     F.name as JmenoFirmy, 
     DVPR.Code as Produkt, 
     DVPA.Code as CastProduktu, 
     case 
     when (US.userstatuscode='Čeká se na řešitele')or 
       (US.userstatuscode='Nezač.-Čeká na přiděl.řešitel')or 
       (US.userstatuscode='Odsouhlaseno zákazníkem') 
     then 'flores.png' 
     else 'nopic.jpg' 
     end AS ResStrana, 
     SU.Name AS Resitel, 
     case 
     when LEFT(DVB.X_Zkratka2, 1)='C' then DVB.X_Zkratka2 
     when LEFT(DVB.X_Zkratka2, 1)<>'C' then '' 
     end AS IC, 
     RIGHT(DVB.X_Zkratka2, 6) AS ICID, 
case 
    when 
    (DVB.[DocDate$DATE]< cast(getDate() as float)-182) 
    then 'color: red;font-weight:bold;Text-decoration:underline' 
    when 
    (DVB.[DocDate$DATE]< cast(getDate() as float)-10) 
    then 'color: red;font-weight:bold' 
    when 
    (DVB.[DocDate$DATE]< cast(getDate() as float)) 
    then 'color: red' 
    when 
    (DVB.[DocDate$DATE]> cast(getDate() as float)) 
    then 'color: green' 
end as Color, 
0 as Pocet, 0 as NejviceMy, 0 as CelkemMy, ' ' ResitelID, 
0 Hotove, 0 Rozpracovane, 0 buffer, 0 PocetProdleni 
from DEVBUGS DVB 
join devproducts AS DVPR on DVB.Product_ID=DVPR.ID 
join devparts AS DVPA on DVB.Part_ID=DVPA.ID 
join userstatuses US on DVB.status_id=US.id 
join periods P on DVB.period_id=P.id 
join docqueues DQ on DVB.docqueue_id=DQ.id and DQ.Code<>'POZ' 
join firms F on DVB.firm_id=F.id 
join SecurityUsers AS SU on DVB.ResponsibleUser_ID=SU.ID 
where 
    (US.userstatuscode<>'Hotovo' and 
    US.userstatuscode<>'Uzamčeno' and 
    US.userstatuscode<>'Odloženo' and 
    US.userstatuscode<>'Zamítnuto') 
AND (DVPA.Code='A' or DVPA.Code='B' or DVPA.Code='C' or DVPA.Code='HA' or DVPA.Code='HB' or DVPA.Code='HC' or DVPA.Code='Z' or DVPA.Code='OBJ' or DVPA.Code='-') 
) A 
ORDER BY typ,NejviceMy desc,Dat2, Resitel ASC 

ошибка, которую я получаю

SQL Error [156] [S1000]: Неправильный синтаксис около 'группы' ключевых слов.
Ошибка SQL [102] [42000]: неправильный синтаксис рядом с ')'.
Неправильный синтаксис около «группы» ключевого слова

Где проблема пожалуйста? Спасибо за все советы.

+3

Вау, это серьезно ваш код? –

+2

Работайте изнутри - попробуйте запустить самый внутренний запрос - это работает? Если нет -> есть твоя проблема. Если он работает -> возьмите следующий уровень запроса и посмотрите, работает ли это. Это огромная, грязная куча кода, чтобы пройти через ... –

+0

Не совсем мое, Это было написано другим человеком, я только редактирую этот код. – Sk1X1

ответ

7

У вас есть:

group by D.ID, D.ResponsibleUser_ID, D.EstimatedTime) 
group by ResponsibleUser_ID) 

Понадобится:

group by D.ID, D.ResponsibleUser_ID, D.EstimatedTime) AS some_alias 
group by ResponsibleUser_ID) 

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

Возможно, это не конец вашего синтаксиса. Не принимайте это лично, но этот код ужасен. Вы должны попытаться упростить и построить логически, что вы пытаетесь выполнить с помощью запроса, а не просто охотиться и клевать, чтобы заставить синтаксис «работать».

+2

@mattytommo поэтому вместо того, чтобы жаловаться на мой ответ, почему вы не разбираете спагетти и не создаете лучшую версию запроса? Это очень простая вещь для тестирования OP. Они могут добавить псевдоним, который я предложил, и если они затем получат ошибку корреляции столбца, ошибка может указывать на то, где они ссылаются на псевдоним, который они никогда не создавали в первую очередь. –

+3

@mattytommo наоборот, я думаю, указывая на то, что проблема - это недостающий псевдоним на 100%. Просто потому, что он не переписывает весь запрос, это не значит, что это не ответ. – JNK

+2

@mattytommo ok, спасибо за ваше мнение. Это был мой способ выразить, что у него непостижимый беспорядок. Если у вас есть лучший способ сказать это, не стесняйтесь также добавлять ответ со своим мнением. Я предполагаю, что сделать * другую * смешную аналогию с Amazon * необходимо, правда? –

Смежные вопросы