Только одно выражение может быть указано в списке выбора, если подзапрос не введен с EXISTS - PullRequest
0 голосов
/ 29 июля 2011

Я пишу следующую хранимую процедуру в sql server 2008 Я получаю ошибку, как я уже говорил, я не знаю, почему так может кто-нибудь решить эту проблему

create PROCEDURE dbo.uspTest1
as
    declare @cnt int;
    declare @cnt1 int;
    declare @cnt2 int;

     set @cnt=(SELECT COUNT(EmpID) AS Expr1 FROM tblTest WHERE (FedTaxID = '888888888') AND (TaxTypeCode = 'TX02'))

set @cnt1=(SELECT COUNT(EmpID) AS Expr1 FROM tblTest
WHERE(FedTaxID = '888888888') AND (TaxTypeCode = 'TX03'))
set @cnt2=(SELECT 
    TaxTypeCode, SUM(Amount) 
FROM 
    tblTest 
WHERE
    FedTaxID = '888888888'
    AND TaxTypeCode IN ('TX02', 'TX03')
GROUP BY
    TaxTypeCode)

Это еще один, который я попробовал, это также дает мне ошибку

create PROCEDURE dbo.uspTest1
as
    declare @cnt int;
    declare @cnt1 int;
    declare @cnt2 int;

     set @cnt=(SELECT     COUNT(EmpID) AS Expr1
FROM         tblTest
WHERE     (FedTaxID = '888888888') AND (TaxTypeCode = 'TX02'))

set @cnt1=(SELECT     COUNT(EmpID) AS Expr1
FROM         tblTest
WHERE     (FedTaxID = '888888888') AND (TaxTypeCode = 'TX03'))

set @cnt2=(SELECT  SUM(Txallt) as txnntot
  FROM (SELECT CASE WHEN  TaxTypeCode = 'tx02' THEN Amount else 0 END as tx02t,
               CASE WHEN  TaxTypeCode = 'tx03' THEN Amount else 0 END as tx03t,
               Amount as txallt
        FROM tbltest
        WHERE FedTaxID = '888888888'
       ))
GROUP BY FedTaxId

This is giving an error as Incorrect Syntax near ')'

Так что любой может сказать, что я делаю не так

Ответы [ 3 ]

2 голосов
/ 29 июля 2011

Просто извлеките TaxTypeCode в первом

set @cnt2=(SELECT 
    SUM(Amount) 
FROM 
    tblTest 
WHERE
    FedTaxID = '888888888'
    AND TaxTypeCode IN ('TX02', 'TX03')
GROUP BY
    TaxTypeCode)

Однако SUM (Amount) .. GROUP BY вернет несколько строк, но вы пытаетесь назначить одну переменную: одна строка в результате будетбыть выбранным произвольно для @ cnt2

Вам нужна GROUP BY?

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

SELECT
   @cnt = COUNT(CASE TaxTypeCode = 'TX02' THEN EmpID ELSE NULL END),
   @cnt1 = COUNT(CASE TaxTypeCode = 'TX03' THEN EmpID ELSE NULL END),
   @cnt2 = SUM(Amount)
FROM
   tblTest
WHERE
   FedTaxID = '888888888'
   AND
   TaxTypeCode IN ('TX02', 'TX03')

В противном случае, добавьте пример данных ичеткое описание того, что вы пытаетесь сделать ...

2 голосов
/ 29 июля 2011

Во первых, проблема в этой строке:

set @cnt2=(SELECT TaxTypeCode, SUM(Amount) FROM tblTest 
WHERE FedTaxID = '888888888' AND TaxTypeCode IN ('TX02', 'TX03') 
GROUP BY TaxTypeCode) 

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


Во втором вы создаете подзапрос, возвращающий таблицу, поэтому вам нужен псевдоним. Изменение

WHERE FedTaxID = '888888888'
         )) 

будет

WHERE FedTaxID = '888888888'
         ) x ) 
0 голосов
/ 29 июля 2011

Подзапросам нужен псевдоним. Это является причиной ошибки "Неверный синтаксис рядом с ')'".

Например, этот запрос не имеет псевдонима, поэтому его выполнение выдает ту же ошибку «Неверный синтаксис»:

declare @x int
set @x = (select count(*) from (select * from sys.objects))

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

declare @x int
set @x = (select count(*) from (select * from sys.objects) AllSysObjects)
select @x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...