查询以逗号分隔的值列表

时间:2013-10-17 15:53:28

标签: sql ms-access

我有一个名为Student with Columns Name and Skills的表。 名称是varchar类型,技能包含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

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

1 个答案:

答案 0 :(得分:2)

我完全同意您 应该 修复您的表格结构的评论。但是,如果你暂时需要一个丑陋的黑客,你可能逃避这样的事情:

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运算符或产生麻烦的列名。