我有一个我想在查询中使用的ISO2国家/地区代码列表.
像这样的东西:
select cou, 128,13, 1
from ('AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', [snip]) as cou
Run Code Online (Sandbox Code Playgroud)
但..工作.
我记得过去做过这样的事情,但我找不到任何关于它的文件了.这是一次性查询,所以我不介意性能,编码实践或可维护性.
有任何想法吗?
更新
正如Pax所指出的,出于各种好的理由,将这些数据存储在我的数据库中确实是更好的做法.我理解他的意见,因为我会回答同样的问题.但是,此数据已经在另一个表中,在另一个数据库中,在另一个服务器上,在另一个网络上.
为了测试我的查询,我需要在这个新数据库的表中使用一些快速镜头值.我不想配置网络,跨服务器查询等只是为了测试我对一些真实数据的查询.我希望这能解释为什么我会反对这一次拍摄.
小智 17
值关键字可用于实现此目的.
select col1, 128 col2, 13 col3, 1 col4
from ( values ('AD'), ('AE'), ('AF'), ('AG'), ('AI'), ('AL'), ('AM')) as x (col1)
Run Code Online (Sandbox Code Playgroud)
帕克斯的回答是正确的做法。但如果你坚持在线执行:
select cou, 128,13, 1
from (select 'AD' as cou
union all select 'AE'
union all select 'AF'
union all select 'AG'
union all select 'AI'
union all select 'AL'
union all select 'AM') as X
Run Code Online (Sandbox Code Playgroud)
第一种使用联合的方式:
select 'AD' union all select 'AE' ....
Run Code Online (Sandbox Code Playgroud)
第二个——不明显,但优雅——使用递归查询;
declare @x as varchar(200)
set @x = 'ADAEAFAGAIALAM'
;with FakeTbl AS (
SELECT substring(@x, 1, 2) sval, 0 as ROWN
WHERE LEN(@x) > 0
UNION ALL
SELECT substring(@x, (it.ROWN+1)*2+1, 2) sval, it.ROWN+1 as ROWN
FROM FakeTbl it
WHERE LEN(@x) > (it.ROWN+1)*2
)
select sval, ROWN from FakeTbl
Run Code Online (Sandbox Code Playgroud)
您放置到@x 字符串,假设代码具有 len 2。此方法的小限制是递归级别(2005 年为 100)