【问题标题】:Ordering columns in Microsoft SQL Server when they contain html tags在 Microsoft SQL Server 中对包含 html 标记的列进行排序
【发布时间】:2013-07-09 21:30:14
【问题描述】:

我在 SQL Server 数据库中有几列,如下所示:

Column1                       Column2   
Item1                         <div id="html"><img.............>5424</div>
Item2                         <div id="html"><img.............>3424</div>
Item3                         <div id="html"><img.............>8424</div>
Item4                         <div id="html"><img.............>6424</div>

我想根据&gt;*&lt;/div&gt; 内部的值使用 ORDER BY 对它们重新排序,以便输出如下所示:

Column1                       Column2   
Item2                         <div id="html"><img.............>3424</div>
Item1                         <div id="html"><img.............>5424</div>
Item4                         <div id="html"><img.............>6424</div>
Item3                         <div id="html"><img.............>8424</div>

我正在使用以下代码从数据库中提取值:

SELECT 
    Table1_1.F1 AS Column1, Table2_1.1PrisHTML AS Column2
FROM     
    Table2 AS Table2_1 
CROSS JOIN
    Table1 AS Table1_1

UNION ALL

SELECT 
    Table1_1.L1, Table2_1.2PrisHTML
FROM     
    Table2 AS Table2_1 
CROSS JOIN
    Table1 AS Table1_1

UNION ALL

SELECT 
    Table1_1.M1, Table2_1.3PrisHTML
FROM     
    Table2 AS Table2_1 
CROSS JOIN
    Table1 AS Table1_1

UNION ALL

SELECT 
    Table1_1.T1, Table2_1.4PrisHTML
FROM
    Table2 AS Table2_1 
CROSS JOIN
    Table1 AS Table1_1

有人有什么建议吗?

编辑:
我确实在单独的列中有值,称为Column3,我可以使用它进行排序。但我不想显示此列。有什么建议吗?

【问题讨论】:

  • 我的建议是将要排序的值分成单独的列。您可以控制表架构吗?
  • 嗨。我确实在单独的列中有值!所以我可以用它们来排序。但不想显示它们。
  • 根据经验,您永远不应该将 HTML 格式存储在数据库中。
  • 仅仅因为它在那里并不意味着你必须展示它。您甚至不必选择它,只需对其进行排序。但我同意将 html 放入数据库可能是个坏主意。当你意识到你不应该有多个具有相同 id 的 html 元素并且必须更改它时会发生什么?或者你想改变 div 的类?是对 html 进行快速更改还是对您的数据进行搜索和替换?
  • 是的,我同意,但在这种情况下,它在一个单独的表中只有大约 10 个整体,不会改变。我的意思是,该表不会添加或删除项目...

标签: c# asp.net sql sql-server database


【解决方案1】:

只需在 SQL 查询的末尾添加一个 Order By 子句。无需将其添加到选择查询中。

我会这样做:

    SELECT Column1, Column2 
    FROM
    (
    SELECT Table1_1.F1 AS Column1, Table2_1.1PrisHTML AS Column2, Column3 
    FROM     Table2 AS Table2_1 CROSS JOIN
                      Table1 AS Table1_1
    UNION ALL
    SELECT Table1_1.L1 AS Column1, Table2_1.2PrisHTML AS Column2, Column3 
    FROM     Table2 AS Table2_1 CROSS JOIN
                      Table1 AS Table1_1
    UNION ALL
    SELECT Table1_1.M1 AS Column1, Table2_1.3PrisHTML AS Column2, Column3 
    FROM     Table2 AS Table2_1 CROSS JOIN
                      Table1 AS Table1_1
    UNION ALL
    SELECT Table1_1.T1 AS Column1, Table2_1.4PrisHTML AS Column2, Column3 
    FROM     Table2 AS Table2_1 CROSS JOIN
                      Table1 AS Table1_1
    )
    ORDER BY Column3

【讨论】:

  • 缺少 Column1 和 Column2 别名。我添加了它们。对此感到抱歉。
  • 对我不起作用。问题是 column3 的名称对于所有条目都不同。例如,F1 称为 F1Col3,L1 称为 L1Col3,M1 称为 M1Col3,T1 称为 T1Col3
  • 您只需要对所有列进行别名化,使它们具有相同的名称,然后您就可以毫无问题地进行合并和排序。
  • ok 现在可以工作了,但不是 Column3 作为排序,而只是输入不同的列名。谢谢
猜你喜欢
  • 2018-09-05
  • 1970-01-01
  • 2010-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-23
相关资源
最近更新 更多