2016-08-17 99 views
0

我基本上是试图运行这两个查询:SQL:运行两个查询一次和变量赋值

SELECT * FROM ProductTable; 

SELECT CAST(CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS BIT) 
FROM UserTable WHERE id = 41; 

两个查询正常工作。第一个将ProductTable中的所有数据返回给我。第二个查询返回我要么10检查,如果该行ID 41存在

运行在一起后:

SELECT * FROM ProductTable SELECT CAST(CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS BIT) 
FROM UserTable WHERE id = 41 

然而,当我运行此,第二个查询不返回任何值, 这是因为我没有为它设置一个SQL变量名。

如何将变量名称设置为第二个查询,以便在读取SQL响应时读取该值?

+0

你想从查询中得到什么最终结果? – p2k

+0

显示执行查询的C#代码和读取结果 – Serg

+0

Product Table有5列,我还需要将第二个查询的数据作为列读取。如果你明白我的意思。所以我会阅读6列@ Pinwar13 – Dinuka

回答

1

尝试这样,

SELECT * 
    ,(
     SELECT CAST(CASE 
        WHEN COUNT(*) > 0 
         THEN 1 
        ELSE 0 
        END AS BIT) 
     FROM UserTable 
     WHERE id = 41 
     ) AS UserCount 
FROM ProductTable; 
+0

好的解决方案!为了了解它,你能解释它是如何工作的吗?第二个查询是一个子查询吗? – Dinuka

+1

是它的子查询。您的子查询将针对主查询中的每条记录运行,但要确保您的子查询仅返回一条记录。 – StackUser

+0

您可以选择最适合解决问题的答案。 – StackUser

1

可以跨也适用..

SELECT p.*,t.[BIT] FROM ProductTable p 
    CROSS APPLY (SELECT CAST(CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS [BIT]) 
       FROM UserTable WHERE id = 41)t 
+0

谢谢你的解决方案! – Dinuka

2
DECLARE @val BIT 
SELECT @val = CAST(CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS BIT) 
FROM UserTable WHERE id = 41 

SELECT P.*, @val FROM ProductTable P 
+0

谢谢你的解决方案! – Dinuka

2

如果你需要1或0检查是否行ID 41存在,那么后(以下是Pinwar13的回答)此代码执行得更好,无需统计所有行

DECLARE @val BIT = CASE WHEN EXISTS (SELECT 1 FROM UserTable WHERE id = 41) 
THEN 1 ELSE 0 END; 

SELECT P.*, @val FROM ProductTable P