Sql server 如何按行表创建临时表和动态字段?
我想在MS-SQL上创建临时表,但通过其他行数据创建字段 表十Sql server 如何按行表创建临时表和动态字段?,sql-server,stored-procedures,Sql Server,Stored Procedures,我想在MS-SQL上创建临时表,但通过其他行数据创建字段 表十 FieldA ======= SkillA SkillB SkillC 临时表 SkillA SkillB SkillC ============================ Null Null Null 谢谢你的帮助 我想在服务器端执行。我不知道行数据的数量。 我扩展 TABLE X FieldA FieldB =================== SKillA
FieldA
=======
SkillA
SkillB
SkillC
临时表
SkillA SkillB SkillC
============================
Null Null Null
谢谢你的帮助
我想在服务器端执行。我不知道行数据的数量。
我扩展
TABLE X
FieldA FieldB
===================
SKillA SubjectA
SkillB SubjectB
SkillC SubjectC
...
...
*** I don't know amount row data ***
Temp Table
SkillA SubjectA SkillB SubjectB SkillC SubjectC
========================================================
非常感谢。试试这个-
查询:
IF OBJECT_ID (N'tempdb.dbo.#temp') IS NOT NULL
DROP TABLE #temp
DECLARE @temp TABLE (FieldA NVARCHAR(50))
INSERT INTO @temp (FieldA)
VALUES
('SkillA'),
('SkillB'),
('SkillC')
SELECT *
INTO #temp
FROM (
SELECT FieldA, a = CAST(NULL AS INT)
FROM @temp
) src
PIVOT
(
MAX(a)
FOR FieldA IN (SkillA, SkillB, SkillC)
) unpvt
SELECT *
FROM #temp t
SkillA SkillB SkillC
----------- ----------- -----------
NULL NULL NULL
IF OBJECT_ID (N'tempdb.dbo.##temp') IS NOT NULL
DROP TABLE ##temp
DECLARE @temp TABLE (FieldA VARCHAR(20), FieldB VARCHAR(20))
INSERT INTO @temp (FieldA, FieldB)
VALUES
('SKillA', 'SubjectA'),
('SkillB', 'SubjectB'),
('SkillC', 'SubjectC')
DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = '
SELECT *
INTO ##temp
FROM (
SELECT ' + STUFF((
SELECT DISTINCT ', [' + FieldA + '] = NULL, [' + FieldB + '] = NULL'
FROM @temp
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + ') t
WHERE 1 != 1'
EXEC sys.sp_executesql @SQL
SELECT *
FROM ##temp t
SKillA SubjectA SkillB SubjectB SkillC SubjectC
----------- ----------- ----------- ----------- ----------- -----------
输出:
IF OBJECT_ID (N'tempdb.dbo.#temp') IS NOT NULL
DROP TABLE #temp
DECLARE @temp TABLE (FieldA NVARCHAR(50))
INSERT INTO @temp (FieldA)
VALUES
('SkillA'),
('SkillB'),
('SkillC')
SELECT *
INTO #temp
FROM (
SELECT FieldA, a = CAST(NULL AS INT)
FROM @temp
) src
PIVOT
(
MAX(a)
FOR FieldA IN (SkillA, SkillB, SkillC)
) unpvt
SELECT *
FROM #temp t
SkillA SkillB SkillC
----------- ----------- -----------
NULL NULL NULL
IF OBJECT_ID (N'tempdb.dbo.##temp') IS NOT NULL
DROP TABLE ##temp
DECLARE @temp TABLE (FieldA VARCHAR(20), FieldB VARCHAR(20))
INSERT INTO @temp (FieldA, FieldB)
VALUES
('SKillA', 'SubjectA'),
('SkillB', 'SubjectB'),
('SkillC', 'SubjectC')
DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = '
SELECT *
INTO ##temp
FROM (
SELECT ' + STUFF((
SELECT DISTINCT ', [' + FieldA + '] = NULL, [' + FieldB + '] = NULL'
FROM @temp
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + ') t
WHERE 1 != 1'
EXEC sys.sp_executesql @SQL
SELECT *
FROM ##temp t
SKillA SubjectA SkillB SubjectB SkillC SubjectC
----------- ----------- ----------- ----------- ----------- -----------
更新2:我不知道行数据的数量
查询:
IF OBJECT_ID (N'tempdb.dbo.#temp') IS NOT NULL
DROP TABLE #temp
DECLARE @temp TABLE (FieldA NVARCHAR(50))
INSERT INTO @temp (FieldA)
VALUES
('SkillA'),
('SkillB'),
('SkillC')
SELECT *
INTO #temp
FROM (
SELECT FieldA, a = CAST(NULL AS INT)
FROM @temp
) src
PIVOT
(
MAX(a)
FOR FieldA IN (SkillA, SkillB, SkillC)
) unpvt
SELECT *
FROM #temp t
SkillA SkillB SkillC
----------- ----------- -----------
NULL NULL NULL
IF OBJECT_ID (N'tempdb.dbo.##temp') IS NOT NULL
DROP TABLE ##temp
DECLARE @temp TABLE (FieldA VARCHAR(20), FieldB VARCHAR(20))
INSERT INTO @temp (FieldA, FieldB)
VALUES
('SKillA', 'SubjectA'),
('SkillB', 'SubjectB'),
('SkillC', 'SubjectC')
DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = '
SELECT *
INTO ##temp
FROM (
SELECT ' + STUFF((
SELECT DISTINCT ', [' + FieldA + '] = NULL, [' + FieldB + '] = NULL'
FROM @temp
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + ') t
WHERE 1 != 1'
EXEC sys.sp_executesql @SQL
SELECT *
FROM ##temp t
SKillA SubjectA SkillB SubjectB SkillC SubjectC
----------- ----------- ----------- ----------- ----------- -----------
输出:
IF OBJECT_ID (N'tempdb.dbo.#temp') IS NOT NULL
DROP TABLE #temp
DECLARE @temp TABLE (FieldA NVARCHAR(50))
INSERT INTO @temp (FieldA)
VALUES
('SkillA'),
('SkillB'),
('SkillC')
SELECT *
INTO #temp
FROM (
SELECT FieldA, a = CAST(NULL AS INT)
FROM @temp
) src
PIVOT
(
MAX(a)
FOR FieldA IN (SkillA, SkillB, SkillC)
) unpvt
SELECT *
FROM #temp t
SkillA SkillB SkillC
----------- ----------- -----------
NULL NULL NULL
IF OBJECT_ID (N'tempdb.dbo.##temp') IS NOT NULL
DROP TABLE ##temp
DECLARE @temp TABLE (FieldA VARCHAR(20), FieldB VARCHAR(20))
INSERT INTO @temp (FieldA, FieldB)
VALUES
('SKillA', 'SubjectA'),
('SkillB', 'SubjectB'),
('SkillC', 'SubjectC')
DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = '
SELECT *
INTO ##temp
FROM (
SELECT ' + STUFF((
SELECT DISTINCT ', [' + FieldA + '] = NULL, [' + FieldB + '] = NULL'
FROM @temp
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + ') t
WHERE 1 != 1'
EXEC sys.sp_executesql @SQL
SELECT *
FROM ##temp t
SKillA SubjectA SkillB SubjectB SkillC SubjectC
----------- ----------- ----------- ----------- ----------- -----------
你能再解释一下你想做什么吗。也许有一个实际的例子。使用PIVOT,但这样你仍然需要知道你的行,对吗?如果我们不知道我们想要创造多少“技能N”呢?