为select语句中的变量赋值,然后用于在嵌套的select语句中查找值

时间:2012-03-08 16:37:25

标签: sql

我收到了错误

  

为变量赋值的SELECT语句不能与数据检索操作结合使用。

这是我的SELECT语句。

SELECT A.vendor_id, **@vendor_employee** = A.vendor_employee_id
    , B.txt_first_name, B.txt_last_name,
    SELECT txt_Vendor_Employee_Detail_Element, 
        (CASE 
            WHEN txt_Vendor_Employee_Detail_Value <> '' 
                AND txt_Vendor_Employee_Detail_Value IS NOT NULL 
            THEN txt_Vendor_Employee_Detail_Value 
            ELSE CONVERT(VARCHAR, txt_Vendor_Employee_Detail_Date) 
        END) AS Vendor_Detail_Element_Value 
    FROM t_vendor_employee_detail 
    WHERE vendor_employee_id = **@vendor_employee**)

FROM...

3 个答案:

答案 0 :(得分:0)

这看起来像是可以使用JOIN重写的东西。如果没有看到整个查询就很难说,但这是一次尝试:

SELECT A.vendor_id, A.vendor_employee_id
    , B.txt_first_name, B.txt_last_name,
    c.txt_Vendor_Employee_Detail_Element, 
        (CASE 
            WHEN c.txt_Vendor_Employee_Detail_Value <> '' 
                AND c.txt_Vendor_Employee_Detail_Value IS NOT NULL 
            THEN c.txt_Vendor_Employee_Detail_Value 
            ELSE CONVERT(VARCHAR, c.txt_Vendor_Employee_Detail_Date) 
        END) AS Vendor_Detail_Element_Value 
FROM ...

INNER JOIN t_vendor_employee_detail c
ON c.vendor_employee_id = A.vendor_employee_id

正如错误消息所示,您无法以您尝试的方式使用变量。

答案 1 :(得分:0)

是的,基本上你不能在同一个select语句中返回数据和赋值变量。我认为你打算做的是correlated subquery,它引用了一个外部值。

那个wolud看起来像这样:

SELECT A.vendor_id, A.vendor_employee_id
    , B.txt_first_name, B.txt_last_name,
    (SELECT d.txt_Vendor_Employee_Detail_Element
    FROM t_vendor_employee_detail d
    WHERE d.vendor_employee_id = A.Vendor_employee_id /* references outside the subqquery */)

FROM...

但您也在子查询中返回多行,这些行应该可以重写为连接。

SELECT A.vendor_id, A.vendor_employee_id
    , B.txt_first_name, B.txt_last_name,
    d.txt_Vendor_Employee_Detail_Element, 
        (CASE 
            WHEN D.txt_Vendor_Employee_Detail_Value <> '' 
                AND d.txt_Vendor_Employee_Detail_Value IS NOT NULL 
            THEN d.txt_Vendor_Employee_Detail_Value 
            ELSE CONVERT(VARCHAR, d.txt_Vendor_Employee_Detail_Date) 
        END) AS Vendor_Detail_Element_Value 
FROM vendor_table_A A 
    INNER JOIN t_vendor_employee_detail d
         ON d.vendor_employee_id = A.vendor_employee_id
    INNER JOIN vendor_table_B B 
         ON...

这些示例将为您提供基本的想法,但我们真的需要整个查询来为您提供完整的解决方案。

答案 2 :(得分:0)

您可以使用合并声明完全检索和分配数据。

这样的事情:     DECLARE @ID TABLE(         ID INT     )

MERGE INTO @ID
USING (
    select 1 a,2 b,3 c
) as src
ON ( 1 = 2 )
WHEN NOT MATCHED THEN
    INSERT (ID)
VALUES (Src.a)
OUTPUT src.b, src.c
;

SELECT * FROM @ID