Sql 如何计算单行中的值?
我有一张这样的桌子:Sql 如何计算单行中的值?,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,我有一张这样的桌子: | ID | X1 | X2 | X3 | .. | Xn | +----+----+----+----+----+----+ | 1 | x | '' | x | '' | '' | +----+----+----+----+----+----+ | 2 | '' | '' | x | '' | '' | +----+----+----+----+----+----+ | 3 | x | x | x
| ID | X1 | X2 | X3 | .. | Xn |
+----+----+----+----+----+----+
| 1 | x | '' | x | '' | '' |
+----+----+----+----+----+----+
| 2 | '' | '' | x | '' | '' |
+----+----+----+----+----+----+
| 3 | x | x | x | '' | x |
+----+----+----+----+----+----+
'' = Empty string, not null
现在我想知道第2行、第3行或第n行中有多少个“x”。有没有一个简单的方法来实现这一点
使用MS SQL Server 2008时,请不要以这种方式存储数据。相反,将其存储在XCoord、YCoord和Value的表中。然后,您可以执行以下操作:
SELECT ID,
(SELECT COUNT(*)
FROM (VALUES (X1),
(X2),
(X3),
/* ... */
(Xn)) T(X)
WHERE X = 'X') AS Num
FROM YourTable
SELECT XCoord, COUNT(Value) AS XTotal
FROM TicTacTable
WHERE (Value = 'x')
GROUP BY XCoord
不要以这种方式存储数据。相反,将其存储在XCoord、YCoord和Value的表中。然后,您可以执行以下操作:
SELECT XCoord, COUNT(Value) AS XTotal
FROM TicTacTable
WHERE (Value = 'x')
GROUP BY XCoord
这是什么RDBMS(和版本?)这是家庭作业吗?看起来像是家庭作业。请告诉我们到目前为止你都做了些什么。我今年31岁,不再做家庭作业了只是试着习惯SQL并练习一些自定的练习。事实上,我正在尝试创建一个简单的Tic-Tac-Toe游戏,并希望计算一行中的X(因此,实际上Xn中的n>3是不可能发生的,但我希望在每个列上都没有选择的解决方案)在问题中添加了数据库。这是什么RDBMS(和版本?)这是家庭作业吗?看起来像是家庭作业。请告诉我们到目前为止你都做了些什么。我今年31岁,不再做家庭作业了只是试着习惯SQL并练习一些自定的练习。事实上,我正在尝试创建一个简单的Tic-Tac-Toe游戏,并希望计算一行中的X(因此,实际上Xn中的n>3是不可能发生的,但我希望在每个列上都没有选择的解决方案)将数据库添加到问题中。如果我不想编写每一列,动态SQL是最好的解决方案吗?我只是创建一个while循环,并将所有x列添加到SQL字符串中。“也许有更好的方法?”FeroC——您可以使用动态SQL生成包括所有列的查询,也可以考虑重构,以便将每个值存储在具有列“代码> ID、索引、值< /代码>的表中的自己的行中。您必须编写每一列;如果你是用SQL写的,那就别无选择。如果我不想写每一列,动态SQL会是最好的解决方案吗?我只是创建一个while循环,并将所有x列添加到SQL字符串中。“也许有更好的方法?”FeroC——您可以使用动态SQL生成包括所有列的查询,也可以考虑重构,以便将每个值存储在具有列“代码> ID、索引、值< /代码>的表中的自己的行中。您必须编写每一列;如果在SQL中进行,则别无选择。如果游戏场地在SQL数据库之外,我会这样做,但在这种情况下,游戏直接在数据库上进行。如果游戏场地在SQL数据库之外,我会这样做,但在这种情况下,游戏直接在数据库上进行。