我需要在此特定表中找到包含最多行的行。 该表看起来像那样,我的输出显示在给定的表上方。
我还不熟悉sql所以也许这很容易解决,但到目前为止我还没有得到任何解决方案。
有没有办法说请搜索一个特定的值并将找到的值加起来,输出应该在一个额外的列中给出?
答案 0 :(得分:2)
看起来非常基本的东西...希望这会有所帮助:
SELECT X.*,
CASE WHEN X.A=1 THEN 1 ELSE 0 END +
CASE WHEN X.B=1 THEN 1 ELSE 0 END +
CASE WHEN X.C=1 THEN 1 ELSE 0 END +
CASE WHEN X.D=1 THEN 1 ELSE 0 END +
CASE WHEN X.E=1 THEN 1 ELSE 0 END +
CASE WHEN X.F=1 THEN 1 ELSE 0 END AS SUM_ONES
FROM X;
答案 1 :(得分:0)
假设您的列数据类型是数字,您可以使用:
SELECT
CASE WHEN col1 = 1 THEN '*' ELSE '' END ||
CASE WHEN col2 = 1 THEN '*' ELSE '' END ||
...
AS RowValueSearchString
然后在RowValueSearchString上使用LEN / CHAR_LENGTH函数(取决于你拥有的任何数据库)来查找上面字符串的长度。连接字符串的长度将为您提供在行中查找的值的出现次数。
答案 2 :(得分:0)
如果您使用的是SQL Server 2012+,则可以使用CASE
或IIF
:
CREATE TABLE X (
A INT,
B INT,
C INT,
D INT,
E INT,
F INT
);
INSERT INTO X VALUES
(1, 0, 0, 1, 0, 1),
(2, 0, 1, 2, 1, 0),
(1, 0, 1, 0, 1, 0);
SELECT X.*,
IIF(A = 1, A, 0) +
IIF(B = 1, B, 0) +
IIF(C = 1, C, 0) +
IIF(D = 1, D, 0) +
IIF(E = 1, E, 0) +
IIF(F = 1, F, 0) AS [Σ]
FROM X;
结果:
+---+---+---+---+---+---+---+
| A | B | C | D | E | F | Σ |
+---+---+---+---+---+---+---+
| 1 | 0 | 0 | 1 | 0 | 1 | 3 |
| 2 | 0 | 1 | 2 | 1 | 0 | 2 |
| 1 | 0 | 1 | 0 | 1 | 0 | 3 |
+---+---+---+---+---+---+---+