写作绅士,读作丧尸 X岛揭示板
 首页版规 |用户系统 |移动客户端下载 | 丧尸路标 | | 常用图串及路标 | 请关注 公众号:【矛盾苇草】| 人,是会思考的芦苇
常用串:·豆知识·跑团板聊天室·公告汇总串·X岛路标

No.62366296 - 无标题 - 技术宅


回应模式
No.62366296
名 称
E-mail
标题
颜文字
正文
附加图片
•程序语言、压制投稿、视频制作以及各计算机领域的技术问题
•我觉得还是CSDN靠谱一点
•本版发文间隔为15秒。

无标题 无名氏 2024-05-13(一)10:04:29 ID:tJxjYVa [举报] [订阅] [只看PO] No.62366296 [回应] 管理
求助,SQL server 里面怎么计算一个值在一行内出现的次数?
收起 查看大图 向左旋转 向右旋转
无标题 无名氏 2024-05-13(一)10:05:55 ID:tJxjYVa (PO主) [举报] No.62366311 管理
比如这样一行数据,我要统计这行里面出现了几次err
无标题 无名氏 2024-05-13(一)10:12:51 ID:cJNuRSn [举报] No.62366396 管理
count ?
无标题 无名氏 2024-05-13(一)10:18:36 ID:cJNuRSn [举报] No.62366450 管理
刚学两天,或者你把行列倒置一下再用count?
无标题 无名氏 2024-05-13(一)10:23:34 ID:cJNuRSn [举报] No.62366505 管理
找到一个相关的,https://bbs.fanruan.com/wenda/question/187242.html#ath
无标题 无名氏 2024-05-13(一)15:26:32 ID:rxP8w5q [举报] No.62369890 管理
在 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 查询,或者考虑重构您的数据库设计,以便更容易地进行此类查询。
收起 查看大图 向左旋转 向右旋转
无标题 无名氏 2024-05-13(一)15:50:43 ID:j3lJQyS [举报] No.62370214 管理
看看我的:

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不能调两遍太丑了).
无标题 无名氏 2024-05-13(一)17:02:15 ID:3UQCtcF [举报] No.62371222 管理
( ゚ᯅ 。)
刚刚痛苦打完作业结果打开岛又是SQL,这种巧合补药啊|д゚ )
无标题 无名氏 2024-05-13(一)17:02:19 ID:y7XR5Zo [举报] No.62371224 管理
在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语法特殊处理的字符。此外,这种方法只适用于文本字段。如果你在查找数字或日期等类型的数据,可能需要其他方法。

UP主: