当前位置: 首页 > 面试题库 >

SQL查询计数频率

袁单鹗
2023-03-14
问题内容

我有一张表,上面有像

id     keywords
1      cat, dog, man, mouse
2      man, pen, pencil, eraser
3      dog, man, friends
4      dog, leash,......

我想做一张像这样的桌子

id  cat  dog  man  mouse  pen  pencil  eraser  friends  leash ......
1   1    1    1    1      0    0       0       0        0
2   0    0    1    0      1    1       1       0        0
3   0    1    1    0      0    0       0       1        0

等等。


问题答案:

WITH basedata(id,keywords) AS
(
SELECT 1,’cat, dog, man, mouse’ union all
SELECT 2 ,’man, pen, pencil, eraser’ union all
SELECT 3,’dog, man, friends’ union all
SELECT 4,’dog, leash’
),
cte(id, t, x)
AS (SELECT *,
CAST(‘ ‘ + REPLACE(keywords,’,’,’ ‘) + ‘ ‘ AS XML)
FROM basedata)
SELECT id,
LTRIM(RTRIM(w.value(‘.’, ‘nvarchar(max)’))) as keyword
INTO #Split
FROM cte
CROSS APPLY x.nodes(‘//foo’) as word(w)


DECLARE @ColList nvarchar(max)

SELECT @ColList = ISNULL(@ColList + ',','') + keyword 
FROM (
SELECT DISTINCT QUOTENAME(keyword) AS keyword
FROM #Split
) T

EXEC(N'       
SELECT *
FROM #Split
PIVOT (COUNT(keyword) FOR keyword IN (' + @ColList + N')) P')

DROP TABLE #Split

id          cat         dog         eraser      friends     leash       man         mouse       pen         pencil
----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
1           1           1           0           0           0           1           1           0           0
2           0           0           1           0           0           1           0           1           1
3           0           1           0           1           0           1           0           0           0
4           0           1           0           0           1           0           0           0           0


 类似资料:
  • 我有3张桌子 许可证中的CREATED_AT是一个日期(非空)字段。 表根据同名主键/外键进行关联;客户可以拥有0个或多个许可证,每个许可证都有一个版本。 我想从这些表格中得到: 客户的名字、姓氏和创建的最后一个许可证的release\u id(根据许可证中的created\u AT字段查找最后一个),如果有。 对于这个问题,我使用了以下查询: 这似乎有效,但我问是否有人可以证实我这一点,或者是否

  • 问题内容: 在SQL中按月将一列中的1-12连接到一堆计数的好方法是什么?…在​​SQL中 最终会像 编辑-基本上是一种获取我的月份列表/表格/任何内容的巧妙方法 问题答案: 许多方法…在上一份工作中对许多应用程序来说对我来说效果很好的一种方法是建立时间表。 然后,您可以将其日期字段放在startstamp和endstamp之间的timeframes表中进行联接。 这样可以很容易地拉出某个时间段或

  • 本节将学习如何从SQL Server数据库查询数据。从一个简单的查询开始,查询语句用于从单个或多个表中检索数据。 SQL是一种特殊目的的编程语言,它是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。SQL语句无论是种类还是数量都是繁多的,很多语句也是经常要用到的,SQL查询语句就是一个典型的例子,无论是高级查询还是低级查询,SQL查询语

  • 问题内容: 我有一张table,上面有所有学生的评分。我正在尝试获得范围内所有学生的人数,例如 0-9 =学生人数9 , 10 -19 =学生人数0 ,依此类推,最多100。 另外,如果有一些机构可以指出关于 案例陈述 的不错的教程,那将是非常好的 给出的答案很好。 但我的范围是固定的。如果没有申请人,我也必须显示0。 这是我的问题的主要区别。就像我也显示了类别。 问题答案: 您不需要声明。您可以

  • 有人真的很快就否决了我的问题,因为它缺乏足够的信息。然后我编辑了它,但反对票仍然是:(

  • 我使用注释和注释执行查询,并从数据库表中删除记录。 错误: xxx的例外。xxx。xx,原因='javax。坚持不懈TransactionRequiredException:执行更新/删除查询“和异常=”执行更新/删除查询;嵌套的异常是javax。坚持不懈TransactionRequiredException:执行更新/删除查询'