【问题标题】:Create dynamic html table, where td values associate to th values from ms sql db创建动态 html 表,其中 td 值与 ms sql db 中的 th 值相关联
【发布时间】:2013-04-08 16:54:18
【问题描述】:

使用 ColdFusion 9 服务器和 MS-SQL db,我正在尝试创建 html 表,其中 td 值与来自同一个 MS-Sql db 表的值相关联。

查询 1 - 获取部门:

<cfquery datasource="datasrc" name="qGetDep">
    SELECT DISTINCT Dept
    FROM someTable
    WHERE isnull(Dept, '') != ''
    ORDER BY DEPT ASC
</cfquery>

查询 2 - 获取名称

<cfquery datasource="datasrc" name="qGetNam">
    SELECT a.Dept, a.names
    FROM someTable as a
    INNER JOIN
    (
    SELECT DISTINCT Dept, MIN(ID) as ID, names
    FROM someTable
    GROUP BY Dept, names
    ) as b
    ON a.Dept = b.Dept
    AND a.ID = b.ID
    WHERE isnull(a.Dept, '') != ''
    ORDER BY a.Dept ASC
</cfquery>

index.cfm

<table border="1" id="table1">
    <thead>
        <tr>
            <cfoutput query="qGetDep">
                <th><b>#DEPT#</b></th>
            </cfoutput>
        </tr>
    </thead>
    <tbody>
        <cfoutput query="qGetNam">
            <tr>
                <cfloop query="qGetDep">
                    <cfset cls= qGetDep.Dept>
                    <cfif qGetNam.Dept EQ cls >
                        <td class="#cls#">#qGetNam.names#</td>
                    <cfelse>
                        <td class="#cls#"></td>
                    </cfif>

                </cfloop>
            </tr>
        </cfoutput>
    </tbody>
</table>

使用我当前在 db 中的数据,这将输出类似于此的表:

我需要它变成这样。
jQuery 解决方案是可以接受的。
任何帮助将不胜感激。
谢谢。

【问题讨论】:

  • 为什么你的第二个查询是循环的?
  • 感谢您的关注,我刚刚删除了该标签。我的一次失败尝试,在我的第二个查询中,我使用了 WHERE a.Dept Like '#qGetDep.Dept#',但即使删除该循环仍然输出相同的表格格式。
  • 这个是sql server,你有没有考虑过运行pivot查询?
  • 我有,但由于某种原因我无法弄清楚,它只给了我一行记录。SET @query = 'SELECT ' + @paramList + ' FROM(SELECT names, Dept FROM someTable )src PIVOT (MIN(name) FOR Dept IN (' + @paramList + ')) pvt'
  • 参数列表?您的 Coldfusion 查询似乎没有任何变量。

标签: jquery sql-server coldfusion


【解决方案1】:

我是根据我对您的“实际私人数据”的假设来回答这个问题的。

希望我的假设是错误的,这可能会让你朝着正确的方向前进。

如果这是你的 -

部门表

这是你的

人员表

然后使用这个查询 -

SELECT *
  FROM (
        SELECT a.id AS pid
              ,a.NAME
              ,b.dept
          FROM deptPeople a
              ,deptTable b
         WHERE a.dept = b.dept
       ) AS A
  PIVOT(
        MIN(NAME) FOR dept IN ( dept1, dept2, dept3, dept4, dept5)
       ) AS B

会给你

像这样在 ColdFusion 中组合所有东西 -

<cfquery datasource="que_tempdb_int" name="qGetDep">
    SELECT dept
    FROM deptTable
    ORDER BY DEPT ASC
</cfquery>

<cfset allDept = valuelist(qGetDep.dept,',') />

<cfquery name="qGetNam" datasource="que_tempdb_int">
    SELECT *
      FROM (
            SELECT a.id AS pid
                  ,a.NAME
                  ,b.dept
                  FROM deptPeople a
                  ,deptTable b
             WHERE a.dept = b.dept
           ) AS A
      PIVOT(
            MIN(NAME) FOR dept IN (#allDept#)
           ) AS B
</cfquery>

<table border="1" id="table1">
    <thead>
        <tr>
            <cfoutput query="qGetDep">
                <th><b>#DEPT#</b></th>
            </cfoutput>
        </tr>
    </thead>
    <tbody>
    <cfoutput query="qGetNam">
        <tr>
            <cfloop list="#allDept#" index="dept" delimiters=",">
            <td>#qGetNam[dept][qGetNam.currentRow]#</td>
            </cfloop>
        </tr>
    </cfoutput>
    </tbody>
</table>

最终结果 -

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 2019-03-22
    相关资源
    最近更新 更多