Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在子查询错误中选择_Sql_Sql Server_Subquery - Fatal编程技术网

Sql 在子查询错误中选择

Sql 在子查询错误中选择,sql,sql-server,subquery,Sql,Sql Server,Subquery,我有以下SQL: SELECT LOTTOID, CASE WHEN VAL0 IN (SELECT * FROM tblDraw) THEN 1 ELSE 0 END + CASE WHEN VAL1 IN (SELECT * FROM tblDraw) THEN 1 ELSE 0 END + CASE WHEN VAL2 IN (SELECT * FROM tblDraw) THEN 1 ELSE 0 END + CASE WHEN VAL3 IN (SE

我有以下SQL:

SELECT LOTTOID,
      CASE WHEN VAL0 IN (SELECT * FROM tblDraw) THEN 1 ELSE 0 END
    + CASE WHEN VAL1 IN (SELECT * FROM tblDraw) THEN 1 ELSE 0 END
    + CASE WHEN VAL2 IN (SELECT * FROM tblDraw) THEN 1 ELSE 0 END
    + CASE WHEN VAL3 IN (SELECT * FROM tblDraw) THEN 1 ELSE 0 END
    + CASE WHEN VAL4 IN (SELECT * FROM tblDraw) THEN 1 ELSE 0 END
    + CASE WHEN VAL5 IN (SELECT * FROM tblDraw) THEN 1 ELSE 0 END
    AS totalValues
INTO #tempWinners
FROM tblLotto 
但我在第2行中遇到以下错误:

当子查询未引入EXISTS时,只能在选择列表中指定一个表达式

tblDraw表如下所示:

LOTTOID VAL0    VAL1    VAL2    VAL3    VAL4    VAL5    DRAWDATE
    3    7       13      15      17      21      43     2013-06-23 10:56:08.927
基本上,我试图做的是使用SQL来计算某人是否有匹配的乐透号码

tblDraw表显然是抽签。我知道我可以做这样的检查:

LOTTOID VAL0    VAL1    VAL2    VAL3    VAL4    VAL5    DRAWDATE
    3    7       13      15      17      21      43     2013-06-23 10:56:08.927
从TBLLOTO中选择VAL0,其中从tblDraw中选择VAL0

但是TBLLOTO中的val0并不总是与绘图中的val0列相匹配,因为val4列中可能有7列,因此我需要检查所有列…

内部的select in

  CASE WHEN VAL0 IN (SELECT * FROM tblDraw) THEN 1 ELSE 0 END
需要只返回一列。目前它正在返回dbo.tblDraw的所有列

在子查询中可以使用SELECT*FROM的唯一时间是子查询是EXISTSELECT*FROM。。。询问

更新:

您的问题是由您的表设计引起的。如果有一个用于draw事件的表和另一个表,其中每个拾取的数字包含一行,并且在客户端具有类似的布局,那么您将遵循第三种标准形式,查询将变得简单得多。但是,让我们假设您不能更改表模式。我还假设您使用的是SQL 2008或更高版本,因为我的解决方案在2005或更早版本上不起作用

要获得您正在寻找的结果,您基本上需要取消绘制值以及客户选择值。然后,您可以将结果集连接起来,并计算返回的行数。假设所有值都是唯一的,通常在抽奖中,这将为您提供客户针对抽奖所做的正确选择的数量

我在下面发布了一个示例解决方案。不要对所有的代码感到震惊。其中大部分是创建表并将一些随机值放入其中。只有查询1标题后的查询才是您要查找的

当我创建对象时,我擅自更改了名称。我还稍微改变了数字,使比赛更有可能进行。在我的例子中,彩票是15分之6的彩票。但这仅与示例数据创建相关,而与最终查询无关

查询首先将dbo.LottoDraws表与dbo.CustomerSelections表连接起来。然后id对子查询进行交叉应用。该子查询使用VALUE运算符首先取消填充客户选择的值,然后取消填充LotteryDraws的值。然后,它将这两个结果集合并在一起并统计匹配项

MS SQL Server 2008架构设置:

问题1:

:


VAL0,VAL1。。。。正在子查询中查找单个列。请尝试返回唯一的列,而不是从tblDraw中选择*。

请发布您的表结构和样本数据更新。请检查。。。。
SELECT *
FROM dbo.LottoDraws ld
JOIN dbo.CustomerSelections cs
ON ld.draw_date = cs.draw_date
CROSS APPLY(
  SELECT COUNT(1) correct_count
  FROM (VALUES(cs.val1),(cs.val2),(cs.val3),(cs.val4),(cs.val5),(cs.val6))csv(val)
  JOIN (VALUES(ld.draw1),(ld.draw2),(ld.draw3),(ld.draw4),(ld.draw5),(ld.draw6))ldd(draw)
  ON csv.val = ldd.draw
)CC
|  DRAW_DATE | DRAW1 | DRAW2 | DRAW3 | DRAW4 | DRAW5 | DRAW6 | CUSTOMER_ID | VAL1 | VAL2 | VAL3 | VAL4 | VAL5 | VAL6 | CORRECT_COUNT |
--------------------------------------------------------------------------------------------------------------------------------------
| 2013-01-01 |     2 |     3 |     4 |     5 |     8 |    12 |         111 |    3 |    6 |    9 |   11 |   14 |   15 |             1 |
| 2013-02-02 |     2 |     3 |     5 |     6 |    12 |    14 |         111 |    1 |    2 |    3 |   10 |   11 |   14 |             3 |
| 2013-03-03 |     5 |     6 |     8 |    10 |    11 |    14 |         111 |    2 |    3 |    6 |   13 |   14 |   15 |             2 |
| 2013-04-04 |     2 |     3 |     5 |     6 |    10 |    12 |         111 |    3 |    5 |    6 |    7 |   12 |   15 |             4 |
| 2013-05-05 |     3 |     6 |     7 |    10 |    11 |    12 |         111 |    1 |    4 |    6 |    7 |    9 |   11 |             3 |
| 2013-01-01 |     2 |     3 |     4 |     5 |     8 |    12 |         222 |    3 |    6 |    8 |    9 |   11 |   14 |             2 |
| 2013-02-02 |     2 |     3 |     5 |     6 |    12 |    14 |         222 |    5 |    7 |   11 |   12 |   13 |   14 |             3 |
| 2013-03-03 |     5 |     6 |     8 |    10 |    11 |    14 |         222 |    2 |    6 |    8 |   10 |   13 |   14 |             4 |
| 2013-04-04 |     2 |     3 |     5 |     6 |    10 |    12 |         222 |    4 |    7 |    8 |   11 |   12 |   15 |             1 |
| 2013-05-05 |     3 |     6 |     7 |    10 |    11 |    12 |         222 |    1 |    2 |    4 |    5 |   11 |   14 |             1 |
| 2013-01-01 |     2 |     3 |     4 |     5 |     8 |    12 |         333 |    3 |    7 |    8 |   10 |   14 |   15 |             2 |
| 2013-02-02 |     2 |     3 |     5 |     6 |    12 |    14 |         333 |    2 |    3 |    4 |    7 |    8 |   10 |             2 |
| 2013-03-03 |     5 |     6 |     8 |    10 |    11 |    14 |         333 |    5 |    6 |    7 |   11 |   12 |   14 |             4 |
| 2013-04-04 |     2 |     3 |     5 |     6 |    10 |    12 |         333 |    1 |    8 |   11 |   12 |   14 |   15 |             1 |
| 2013-05-05 |     3 |     6 |     7 |    10 |    11 |    12 |         333 |    3 |    4 |    5 |    8 |   10 |   13 |             2 |
| 2013-01-01 |     2 |     3 |     4 |     5 |     8 |    12 |         444 |    2 |    8 |   10 |   11 |   13 |   14 |             2 |
| 2013-02-02 |     2 |     3 |     5 |     6 |    12 |    14 |         444 |    4 |    6 |    7 |    9 |   10 |   13 |             1 |
| 2013-03-03 |     5 |     6 |     8 |    10 |    11 |    14 |         444 |    2 |    3 |    4 |    6 |   11 |   15 |             2 |
| 2013-04-04 |     2 |     3 |     5 |     6 |    10 |    12 |         444 |    2 |    4 |    7 |    8 |   12 |   14 |             2 |
| 2013-05-05 |     3 |     6 |     7 |    10 |    11 |    12 |         444 |    4 |    7 |   11 |   13 |   14 |   15 |             2 |