【问题标题】:How to transpose column without SQL procedures如何在没有 SQL 过程的情况下转置列
【发布时间】:2023-03-09 22:21:01
【问题描述】:

我有一个 SQL 表,它保存如下图所示的值

现在我需要像下面显示的那样转置这张表。

我需要在不使用存储过程的情况下执行此操作。我正在尝试将第二个表绑定到 4 个 datagridview 复选框列。

【问题讨论】:

  • 你可以开始学习PIVOT;尝试一些代码并返回这里
  • “我需要在不使用 SQL 的情况下执行此操作” - 您希望如何执行此操作?
  • 对不起。我想在不编写新的存储过程或任何临时表、光标等的情况下做到这一点。现在编辑我的问题。我现在正在学习 SQL 中的枢轴。但即使使用数据透视表,这似乎也很难做到。

标签: c# sql sql-server datagridview pivot


【解决方案1】:

这应该可以工作,但是如果您在 C2 中的值并不总是 [MP], [KL], [OL], [IFL],您可能需要尝试使其动态化 如果您的数据集相对较大,请注意使用 CROSS JOIN

样本数据:

IF OBJECT_ID('tempdb..#temp') IS NOT NULL
    DROP TABLE #temp;

CREATE TABLE #temp(C1 INT
              , C2 VARCHAR(10));

INSERT INTO #temp
VALUES
      (1
     , 'MP'),
      (2
     , 'KL'),
      (3
     , 'OL'),
      (3
     , 'IFL');

查询:

SELECT DISTINCT
      C1
    , [MP] = CASE
               WHEN [MP] = C1 THEN 'TRUE'
               ELSE ''
            END
    , [KL] = CASE
               WHEN [KL] = C1 THEN 'TRUE'
               ELSE ''
            END
    , [OL] = CASE
               WHEN [OL] = C1 THEN 'TRUE'
               ELSE ''
            END
    , [IFL] = CASE
                WHEN [IFL] = C1 THEN 'TRUE'
                ELSE ''
            END
FROM   #temp AS A
      CROSS JOIN
              (SELECT [MP]
                   , [KL]
                   , [OL]
                   , [IFL]
               FROM
                    (SELECT C1
                         , C2
                     FROM   #temp) AS SourceTable PIVOT(MAX(C1) FOR C2 IN([MP]
                                                              , [KL]
                                                              , [OL]
                                                              , [IFL])) AS PivotTable) AS B;

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 2022-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多