Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在没有SQL过程的情况下转置列_C#_Sql_Sql Server_Datagridview_Pivot - Fatal编程技术网

C# 如何在没有SQL过程的情况下转置列

C# 如何在没有SQL过程的情况下转置列,c#,sql,sql-server,datagridview,pivot,C#,Sql,Sql Server,Datagridview,Pivot,我有一个SQL表,它保存的值如下图所示 现在,我需要像下面所示那样转换这个表 我需要在不使用存储过程的情况下执行此操作。我正在尝试将第二个表绑定到4个datagridview复选框列。这应该可以工作,但是如果C2中的值不总是[MP]、[KL]、[OL]、[IFL]的话,您可能需要尝试将其动态化。如果您的数据集相对较大,也要小心使用交叉连接: 样本数据: IF OBJECT_ID('tempdb..#temp') IS NOT NULL DROP TABLE #temp; CREAT

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

现在,我需要像下面所示那样转换这个表


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

这应该可以工作,但是如果C2中的值不总是
[MP]、[KL]、[OL]、[IFL]
的话,您可能需要尝试将其动态化。如果您的数据集相对较大,也要小心使用
交叉连接

样本数据:

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;
结果:


您可以开始学习有关枢轴的知识;请尝试一些代码,然后回到这里“我需要在不使用SQL的情况下执行此操作”-您希望如何执行此操作?抱歉。我想在不编写新的存储过程或任何临时表、游标等的情况下执行此操作。现在编辑我的问题。我现在正在学习SQL中的pivot。但是,即使使用透视表,也很难做到这一点。