【问题标题】:Querying comma-separated lists of values查询逗号分隔的值列表
【发布时间】:2013-10-17 15:53:28
【问题描述】:

我有一个名为“学生”的表格,其中包含列名称和技能。 名称是 varchar 类型,Skills 包含学生的 CSV 格式的技能。 例如:

Name    Skills
ABC     C,Python,JAVA
XYZ     C,Python,C#
UT      C,SQL,JS,CSS

我想显示一个这样的表格

Name    C     C++     C#      Python      JAVA      SQL        JS        CSS
ABC     1     0       0         1         0        0            0         0
XYZ     1     0       1          1        0        0            0         0

我该怎么做? 此外,每个学生都在大学学习。 我想显示学院名称来代替名称列。 并且 Skills 下的列需要是每个 SKILL 的 NUMBER 学生的 COUNT。

【问题讨论】:

  • 我认为是时候使用一堆案例陈述了
  • 首先修改表格以每行存储一个名称/技能对。在一个领域存储多种技能会使您难以实现目标。
  • @Limey,你能帮我解决这个问题吗?我真的只是一个初学者,我已经给了这个东西几个小时了。
  • 您的数据基本上无法使用。 @HansUp 给了你一个很好的建议。你应该看看为什么你认为它不能完成。另外,既然你说你是一个初学者并且你的数据库设计很糟糕,我听说过这本书的好东西,数据库设计对于凡人。
  • Access SQL 不支持“CASE WHEN”结构。

标签: sql ms-access


【解决方案1】:

我完全同意您确实应该修复表结构的 cmets。但是,如果您暂时需要一个丑陋的 hack,您可能可以使用以下方法:

SELECT
    [Name],
    IIf(Skillz LIKE "*,C,*",1,0) AS C,
    IIf(Skillz LIKE "*,Python,*",1,0) AS Python,
    IIf(Skillz LIKE "*,CSS,*",1,0) AS CSS
FROM
    (
        SELECT 
            [Name],
            "," & Skills & "," AS Skillz
        FROM tblSkills
    )

诀窍是将逗号粘贴到技能列的开头和结尾,这样在每种情况下您只搜索类似"*,C,*" 而不是"C,*" Or "*,C,*" Or "*,C" 的内容。

另外,请注意“有趣的字符”,以防它们混淆 LIKE 运算符或产生麻烦的列名。

【讨论】:

  • 这似乎不起作用。另外,我不明白第二个选择语句。
  • @shashlearner 第二个 SELECT 语句是将逗号粘贴到数据开头和结尾的子查询(而不是修改表本身的数据)。至于“不工作”,在发布我的答案之前,我测试了 Access 2010 中的确切查询,它对我来说很好。
  • 你能过来聊天吗?非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 2015-03-25
  • 2011-06-18
  • 2020-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多