【问题标题】:Want to show data horizontally in MS SQL Server 2008想要在 MS SQL Server 2008 中水平显示数据
【发布时间】:2013-09-17 16:47:13
【问题描述】:

我有一个包含以下字段的表: 城市 nvarchar(50), 测试名称 nvarchar(200), 方法 nvarchar(500), 帽 nvarchar(3), 单位 nvarchar(3)

我不想像这样显示数据

City || Testname  || Method || Cap || Unit 

我想以以下方式显示数据:

TestName  || City ||    City1   ||   City2   ||          
          ||      ||CAP || Unit ||CAP || Unit||

任何想法以这种形式格式化数据?

使用 SQL 或 C#.net 代码?

【问题讨论】:

  • 如果您想在客户端上显示它,我强烈建议您在 C# 中执行此操作。您可以在 SQL 中执行此操作,但更难,而且 SQL 不太适合此操作。

标签: c# sql sql-server


【解决方案1】:

在 SQL 中,您无法生成这样的设置。

您可以做的是创建一个 C# 程序并使用一些现有的网格库。仅举几例,您可以查看TelerikDevExpress,它们具有强大的网格控件。它们都是有代价的,我没有使用过其他任何人。

您必须将表格“拆分”为 master - detail 表格并提供网格。

免责声明

我并不是要宣传上述产品。这只是个人意见。两者我都用过,我喜欢 DevExpress,但肯定还有很多其他强大的库。

【讨论】:

    【解决方案2】:

    可能是这样:

    select TestName, City, City City1, City City2, '', Cap CAP, Unit, Cap CAP, Unit Unit
    from YourTable
    

    【讨论】:

      【解决方案3】:

      我能想到的最好的是

      DECLARE  @sql  NVARCHAR(MAX),
               @cols NVARCHAR(MAX)
      
      SELECT @cols = STUFF(
      (SELECT ',
      MAX(CASE WHEN [City] = ''' + [City] + ''' THEN [Cap] ELSE NULL END) AS [' + [City] + 'Cap],
      MAX(CASE WHEN [City] = ''' + [City] + ''' THEN [Unit] ELSE NULL END) AS [' + [City] + 'Unit]'
      FROM Table1
      GROUP BY City
      ORDER BY City 
      FOR XML PATH(''),type).value('.','varchar(max)'), 1, 2, '')
      
      SET @sql = 'SELECT [Testname], ' + @cols + '  FROM Table1 GROUP BY [Testname]'
      
      PRINT @sql
      
      EXECUTE(@sql)
      

      它生成一个具有以下结构的表

      Testname | City1Cap | City1Unit | City2Cap | City2Unit | City3Cap | City3Unit | etc.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-09
        • 1970-01-01
        • 1970-01-01
        • 2010-10-20
        • 1970-01-01
        • 1970-01-01
        • 2018-11-02
        • 1970-01-01
        相关资源
        最近更新 更多