Sql-Server-2008

子查詢sql的問題

  • May 7, 2021

您好我收到此錯誤:

當不使用 EXISTS 引入子查詢時,選擇列表中只能指定一個表達式。

這是我目前的 SQL 查詢:

DECLARE @UgpEntry VARCHAR(50)

SELECT @UgpEntry = UgpEntry FROM OITM t1 WHERE t1.ItemCode='CID-11418272385'

IF (@UgpEntry = -1)

SELECT
t1.ItemCode as sapitemcode
    , t1.CodeBars as Barcode
    , t1.ItemName as description
    ,LEFT(t1.ItemName,20) as short_description
    , 
          (select max(p.Price)
       from ITM1 p 
       where p.ItemCode = t1.ItemCode 
         and p.PriceList = 1) as [price_1]
    ,
        (SELECT T0.[ItemCode], T2.[U_NAME] as 'User that created Item', t0.updatedate

FROM AITM T0 inner join OUSR T2 on t0.usersign = t2.internal_K

WHERE T0.[ItemCode] = t1.ItemCode

group by T0.[ItemCode], T2.[U_NAME], t0.loginstanc, t0.updatedate

having t0.loginstanc = (select min(loginstanc) from AITM where itemcode = t0.loginstanc)),
    CASE t1.VatGourpSa when 'V0' THEN 4 when 'V1' THEN 1 WHEN 'V2' THEN 2 WHEN 'V3' THEN 3 END as TaxCode,t1.U_GRUPOA, t1.U_GRUPOB, t1.U_GRUPOC, t1.UgpEntry

FROM OITM t1
WHERE t1.ItemCode='CID-11418272385'

ELSE

SELECT t1.ItemCode as sapitemcode
    , t1.CodeBars as Barcode
    , t1.ItemName as description
    ,LEFT(t1.ItemName,20) as short_description
    , (select max(p.Price)
       from ITM9 p 
       where p.ItemCode = t1.ItemCode 
         and p.UomEntry = 1 and p.PriceList = 1) as [price_1mananitas],

          (select max(p.Price)
       from ITM1 p 
       where p.ItemCode = t1.ItemCode 
         and p.PriceList = 1) as [preciocajamananitas],
(select max(p.Price)
       from ITM9 p 
       where p.ItemCode = t1.ItemCode 
         and p.UomEntry = 1 and p.PriceList = 2) as [price_2cabra],
              (select max(p.Price)
       from ITM1 p 
       where p.ItemCode = t1.ItemCode 
         and p.PriceList = 2) as [preciocajacabra]

    , CASE t1.VatGourpSa when 'V0' THEN 4 when 'V1' THEN 1 WHEN 'V2' THEN 2 WHEN 'V3' THEN 3 END as TaxCode,t1.U_GRUPOA, t1.U_GRUPOB, t1.U_GRUPOC, t1.UgpEntry

FROM OITM t1
WHERE t1.ItemCode='CID-11418272385'

我剛剛添加了這個子查詢:

(SELECT T0.[ItemCode], T2.[U_NAME] as 'User that created Item', t0.updatedate
   
   FROM AITM T0 inner join OUSR T2 on t0.usersign = t2.internal_K
   
   WHERE T0.[ItemCode] = t1.ItemCode
   
   group by T0.[ItemCode], T2.[U_NAME], t0.loginstanc, t0.updatedate
   
   having t0.loginstanc = (select min(loginstanc) from AITM where itemcode = t1.ItemCode))

當我單獨執行它時,我會得到這樣的結果:

在此處輸入圖像描述

我想要做的是在我的主查詢中添加該選擇,以便在原始查詢中顯示為新列。所以它應該看起來像新列 (T2.

$$ U_NAME $$和 t0.updatedate) 最後是這樣的: 在此處輸入圖像描述

我錯過了什麼?

謝謝你

用過的:

WITH sub AS (
   SELECT 
       t1.itemcode as sapitemcode, 
       t1.CodeBars as Barcode, 
       t1.ItemName as description, 
       LEFT(t1.ItemName,20) as short_description,
       --MAX(case when T0.PriceList = 1 then t0.Price else null end) as price_1,  
       case when T0.PriceList = 1 then t0.Price else null end as price_1,  
       NULL as precio_tableta,
       CASE t0.PriceList when '1' THEN 1 END as Price_level_1, 
       --CASE t1.SalUnitMsr when 'PZA' THEN 1 WHEN 'UND' THEN 1 when 'CAJA' THEN 1 when '' THEN NULL END as uom_group_id,
       case when t1.NumInSale > 1 THEN '1' END as uom_group_id,
       (   SELECT T5.[ItemCode]
           FROM AITM T5 inner join OUSR T6 on t5.usersign = t6.internal_K
           WHERE T5.[ItemCode] = 'CID-11418272385'
           group by T5.[ItemCode], T6.[U_NAME], t5.loginstanc, t5.updatedate
           having t5.loginstanc = (select min(loginstanc) 
                       from AITM 
                       where itemcode = 'CID-11418272385')) AS col1,
       (   SELECT T6.[U_NAME] as 'User that created Item'
           FROM AITM T5 inner join OUSR T6 on t5.usersign = t6.internal_K
           WHERE T5.[ItemCode] = 'CID-11418272385'
           group by T5.[ItemCode], T6.[U_NAME], t5.loginstanc, t5.updatedate
           having t5.loginstanc = (select min(loginstanc) 
                       from AITM 
                       where itemcode = 'CID-11418272385')) aS col2,
       (   SELECT t5.updatedate
           FROM AITM T5 inner join OUSR T6 on t5.usersign = t6.internal_K
           WHERE T5.[ItemCode] = 'CID-11418272385'
           group by T5.[ItemCode], T6.[U_NAME], t5.loginstanc, t5.updatedate
           having t5.loginstanc = (select min(loginstanc) 
                       from AITM 
                       where itemcode = 'CID-11418272385')) AS col3,
       CASE t1.VatGourpSa when 'V0' THEN 4 when 'V1' THEN 1 WHEN 'V2' THEN 2 WHEN 'V3' THEN 3 END as Impuesto, 
       t1.U_GRUPOA as Grupo, 
       t1.U_GRUPOB as Departamento, 
       t1.U_GRUPOC as Categoria, 
       t1.NumInSale as ItemsPerSalesUnit, 
       t1.SellItem as SellItem 
   from ITM1 T0
   inner join oitm t1 on t0.itemcode = t1.itemcode
   inner join ouom t2 on t2.uomentry = t0.uomentry  
   where t1.ItemCode='CID-11418386891' 
   and PriceList='1'
)
SELECT sub.sapitemcode, 
   sub.Barcode, 
   sub.description, 
   sub.short_description,
   MAX(sub.price_1),  
   sub.precio_tableta,
   sub.Price_level_1, 
   sub.uom_group_id,
   sub.col1,
   sub.col2,
   sub.col3,
   sub.Impuesto, 
   sub.Grupo, 
   sub.Departamento, 
   sub.Categoria, 
   sub.ItemsPerSalesUnit, 
   sub.SellItem 
FROM sub
GROUP BY sub.Barcode, 
   sub.description, 
   sub.short_description,
   sub.precio_tableta,
   sub.Price_level_1, 
   sub.uom_group_id,
   sub.col1,
   sub.col2,
   sub.col3,
   sub.Impuesto, 
   sub.Grupo, 
   sub.Departamento, 
   sub.Categoria, 
   sub.ItemsPerSalesUnit, 
   sub.SellItem

引用自:https://dba.stackexchange.com/questions/291190