回应模式 - No.62366296


No.62366296 - 技术宅


无标题无名氏No.62366296 只看PO

2024-05-13(一)10:04:29 ID:tJxjYVa 回应

求助,SQL server 里面怎么计算一个值在一行内出现的次数?

无标题无名氏No.62366311

2024-05-13(一)10:05:55 ID: tJxjYVa (PO主)

比如这样一行数据,我要统计这行里面出现了几次err

无标题无名氏No.62366396

2024-05-13(一)10:12:51 ID: cJNuRSn

count ?

无标题无名氏No.62366450

2024-05-13(一)10:18:36 ID: cJNuRSn

刚学两天,或者你把行列倒置一下再用count?

无标题无名氏No.62366505

2024-05-13(一)10:23:34 ID: cJNuRSn

找到一个相关的,https://bbs.fanruan.com/wenda/question/187242.html#ath

无标题无名氏No.62369890

2024-05-13(一)15:26:32 ID: rxP8w5q

在 SQL Server 中,要计算一个值在所有字段内针对一个特定 ID 出现的次数,您通常需要针对每个字段单独进行计数,并且根据 ID 进行分组。下面是一个示例查询,展示了如何做到这一点:

假设您有一个名为 your_table 的表,其中包含 id 列和多个其他列(例如 field1, field2, field3 等),您想要计算值 'your_value' 在每个字段内针对每个 id 出现的次数:

sql
SELECT
id,
SUM(CASE WHEN field1 = 'your_value' THEN 1 ELSE 0 END) AS count_in_field1,
SUM(CASE WHEN field2 = 'your_value' THEN 1 ELSE 0 END) AS count_in_field2,
SUM(CASE WHEN field3 = 'your_value' THEN 1 ELSE 0 END) AS count_in_field3,
-- ... 为其他字段添加类似的语句
SUM(
CASE WHEN field1 = 'your_value' THEN 1 ELSE 0 END +
CASE WHEN field2 = 'your_value' THEN 1 ELSE 0 END +
CASE WHEN field3 = 'your_value' THEN 1 ELSE 0 END
-- ... 加上其他字段的计数
) AS total_count_per_id
FROM
your_table
GROUP BY
id;

这个查询会针对每个 id,分别计算 field1, field2, field3(以及您可能添加的其他字段)中 'your_value' 出现的次数,并且还有一个 total_count_per_id 列,它显示了每个 id 的总计数。

请注意以下几点:

您需要将 your_table, id, field1, field2, field3, 和 'your_value' 替换为您实际的表名、列名和要查找的值。
对于每个字段,我们都使用了一个 CASE 语句来检查字段的值是否等于我们想要查找的值,并据此计数。
GROUP BY id 确保我们按 id 分组结果,这样每个 id 都会有其自己的计数。
total_count_per_id 列计算了每个 id 的总计数,这是通过将每个字段的计数相加得到的。
如果您的表有很多字段,手动编写这样的查询可能会很繁琐。在这种情况下,您可能需要编写一个脚本来动态生成 SQL 查询,或者考虑重构您的数据库设计,以便更容易地进行此类查询。

无标题无名氏No.62370214

2024-05-13(一)15:50:43 ID: j3lJQyS

看看我的:

CREATE Table #tb(
Id integer,
day1 varchar(10),
day2 varchar(10),
day3 varchar(10),
day4 varchar(10)
);

DECLARE @Targ varchar(10);
SET @Targ = 'y';

INSERT INTO #tb VALUES( 1, 'n', 'y', 'y', 'y');
INSERT INTO #tb VALUES( 2, 'n', 'y', 'y', 'n');
INSERT INTO #tb VALUES( 3, 'n', 'n', 'y', 'n');

SELECT * FROM #tb;

WITH map AS(
SELECT
Id, Datee, stat
FROM
#tb
UNPIVOT(
stat FOR Datee IN (day1, day2, day3, day4) ) pv
WHERE pv.stat = @Targ
)

SELECT * FROM map;

DROP TABLE #tb;

效果如图(省略了一个GroupBy,自己写吧,WithAs不能调两遍太丑了).

无标题无名氏No.62371222

2024-05-13(一)17:02:15 ID: 3UQCtcF

( ゚ᯅ 。)
刚刚痛苦打完作业结果打开岛又是SQL,这种巧合补药啊|д゚ )

无标题无名氏No.62371224

2024-05-13(一)17:02:19 ID: y7XR5Zo

在SQL Server中,如果你想计算一个特定值在一行内出现的次数,你可以使用一种称为LEN和REPLACE的组合方法来实现。这种方法可以帮助你找到一个特定字符串在另一个字符串中出现的次数。这里有一个具体的例子:
假设你有一个名为YourTable的表,其中有一列名为YourColumn,你想要计算这个列中每一行特定值YourValue出现的次数。下面是相应的SQL查询语句:
sqlCopy code
SELECT
YourColumn,
(LEN(YourColumn) - LEN(REPLACE(YourColumn, 'YourValue', ''))) / LEN('YourValue') AS ValueCount
FROM
YourTable
这个查询的工作原理是:
REPLACE(YourColumn, 'YourValue', ''):这个函数将YourColumn中的所有YourValue替换为空字符串,这样就删除了所有的YourValue。
LEN(YourColumn) - LEN(REPLACE(YourColumn, 'YourValue', '')):这个表达式计算替换前后字符串长度的差,这个差值就是所有YourValue的总字符长度。
最后,用上述得到的长度差除以YourValue的长度,就可以得到YourValue在每行中出现的次数。
注意,这种方法假设YourValue的长度非零,并且YourValue不包含任何可能被SQL语法特殊处理的字符。此外,这种方法只适用于文本字段。如果你在查找数字或日期等类型的数据,可能需要其他方法。