C# 如何在没有SQL过程的情况下转置列
我有一个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
我需要在不使用存储过程的情况下执行此操作。我正在尝试将第二个表绑定到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。但是,即使使用透视表,也很难做到这一点。