【问题标题】:Better way to do this (set and call parameters)更好的方法(设置和调用参数)
【发布时间】:2022-01-06 15:23:26
【问题描述】:

我正在尝试得到这个结果:

这两行来自同一个查询,但我必须复制结果(第一个称为“CLI”,第二个称为“CPA”)。

目前我用 UNION 来做:

WITH Temp AS (SELECT Code, Name, ...)

SELECT 'CLI' as RecordType, Code, Name, CONCAT('CLI', Name) as TechnicalName, ... FROM Temp
UNION ALL
SELECT 'CPA' as RecordType, Code, Name, CONCAT('CPA', Name) as TechnicalName, ... FROM Temp

还有其他最有效的解决方案吗? 因为大约有30列,所以现在代码很大。

我想到了这样的事情:

DECLARE @P_RecordType as char(3);

WITH Temp AS (SELECT Code, Name, ...)

SET @P_RecordType = 'CLI'
SELECT * FROM Temp
UNION ALL
SET @P_RecordType = 'CPA'
SELECT * FROM Temp

但它不起作用。

PS:我正在从“Microsoft SQL Azure (RTM) - 12.0.2000.8”查询 SSMS。

【问题讨论】:

  • 您可以在FROMCROSS JOIN/CROSS APPLY 中构造VALUES 表。

标签: sql-server tsql azure-sql-database


【解决方案1】:

您可以尝试使用带有值的CROSS APPLY 使其变得简单。

查询 1

SELECT v.c as RecordType, Code, Name, CONCAT(v.c, Name) as TechnicalName
FROM Temp
CROSS APPLY(VALUES ('CPA'),('CLI')) v (c)

Results

【讨论】:

  • 有效!!谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 1970-01-01
相关资源
最近更新 更多