【发布时间】:2018-12-11 10:57:49
【问题描述】:
我有一个通用列名称为“PARAM1”、“PARAM2”、“PARAM3”的文章表...
这些列的真实名称存储在不同的表中。
SELECT
A.PARAM1, -- This is the data
N1.NOMPAR, -- This is the column name
A.PARAM2 AS N2.NOMPAR -- This does not work, but the desired output
FROM dbo.ARTICULO AS A
LEFT JOIN dbo.NOMPARAMS AS N1 ON N1.NUMPAR = 1 AND N1.TIPPAR='ART'
LEFT JOIN dbo.NOMPARAMS AS N2 ON N2.NUMPAR = 2 AND N2.TIPPAR='ART';
我想使用真实的实时数据,而不是硬编码来自 Article 表的不同查询的别名。另外,有没有办法不为每个 paramX 做 9 个不同的左连接?数据库一团糟,到处都在使用这种设计。谢谢
编辑:
这就是我现在的结果:
DECLARE @DynamicTSQLStatement NVARCHAR(MAX);
SET @DynamicTSQLStatement
= N'SELECT CODART, ' + STUFF(
(
SELECT ',[PARAM' + RIGHT([NUMPAR] + 10, 1) + '] AS [' + [NOMPAR] + ']'
FROM dbo.NOMPARAMS
WHERE TIPPAR = 'ART'
AND NOMPAR <> ''
ORDER BY [NUMPAR]
FOR XML PATH(''), TYPE
).value('.', 'VARCHAR(MAX)'),
1,
1,
''
) + N'FROM dbo.ARTICULO';
EXEC sp_executesql @DynamicTSQLStatement;
仍在寻找如何向查询添加连接
SELECT C1.DESCCAR, -- This is the data
NP1.NOMPAR, -- This is the column name
C2.DESCCAR AS NP2.NOMPAR, -- This does not work, but the desired output
A.PARAM1, -- This is the data
N1.NOMPAR, -- This is the column name
A.PARAM2 AS N2.NOMPAR -- This does not work, but the desired output
FROM dbo.ARTICULO A
LEFT JOIN dbo.CARACTERISTICAS AS C1 ON(C1.TIPCAR='A' AND C1.NUMCAR='1' AND C1.CODCAR=A.CAR1)
LEFT JOIN dbo.CARACTERISTICAS AS C2 ON(C2.TIPCAR='A' AND C2.NUMCAR='2' AND C2.CODCAR=A.CAR2)
LEFT JOIN dbo.NOMPARAMS AS NP1 ON(NP1.TIPPAR='ART' AND NP1.NUMPAR='1')
LEFT JOIN dbo.NOMPARAMS AS N1 ON N1.NUMPAR=1 AND N1.TIPPAR='ART'
LEFT JOIN dbo.NOMPARAMS AS N2 ON N2.NUMPAR=2 AND N2.TIPPAR='ART';
【问题讨论】:
标签: sql sql-server tsql alias