我对使用MS SQL Server的SQL有疑问
我有一张桌子
customer
id country_id post_code_id
1 AU 1
2 GB 1
我把邮政编码表分开了
post_codes_AU
post_codes_GB
etc..
有没有办法可以在查询中使用country_id加入正确的表格...例如,
select * from customer c
inner join post_codes_ '+c.country_id+' as pc on pc.id=c.post_code_id
答案 0 :(得分:1)
您无法像这样加入查询。
要进行正确的查询,您可以执行以下操作之一:
UNION ALL
语句粘合在一起。答案 1 :(得分:0)
如果您的示例查询建议的名称中确实有空格,则需要在表名周围添加[]
。这看起来像一个错字,所以你可能不需要这样做。一旦你这样做,它应该可以作为动态SQL工作。
在您走这条路线之前,请确保您知道使用动态SQL的潜在pifall。值得一读:
答案 2 :(得分:0)
创建视图并加入;
-- #1 create a view . . . .
create view MyPostCodes
as
select
country_id='AU',
post_code_id
from
post_codes_AU
union
select
country_id='GB',
post_code_id
from
post_codes_GB
go
-- #2 now join like this
select * from customer c
inner join MyPostCodes as pc on pc.id=c.post_code_id and pc.country_id=c.country_id
答案 3 :(得分:0)
看起来您的查询会有效,稍有改动。
;with cte as (
select
[STOCK NO]
, u.rev
, bomEntry = row_number() over (order by u.ordinal)
, u.Partid
, Qty='1'
, cmnt = 'TEST'
, srcLoc = 'TEST'
, dType = '0'
, lead = '0'
, lineNbr = row_number() over (order by u.ordinal)
, RevControl
from [inserted]
cross apply (values
([bomRev],1,[BOM-WHEEL PN])
,([bomRev],2,[BOM - RIM])
,([bomRev],3,[BOM - SECONDARY DISC PN])
,([bomRev],4,[BOM - FIN DISC PN])
,([bomRev],5, [BOM - FLAT FIN DISC PN])
,([bomRev],6,[WHL BOM PART 1 PN])
,([bomRev],7,[WHL BOM PART 2 PN])
,([bomRev],8,[WHL BOM PART 3 PN])
,([bomRev],9,[WHL BOM PART 4 PN])
,([bomRev],10,[WHL BOM PART 5 PN])
,([bomRev],11,[COLOR-PN])
) u (rev, ordinal, partId)
where nullif(u.partId, '') is not null
)
INSERT INTO WITESTCO.dbo.[WIBOMD]
([bomItem], [bomRev], [bomEntry], [partId], [qty],[cmnt],[srcLoc],[dType],[lead],[lineNbr])
select
cte.[STOCK NO]
, cte.rev
, cte.bomEntry
, cte..Partid
, cte.Qty
, cte.cmnt
, cte.srcLoc
, cte.dType
, cte.lead
, cte.lineNbr
from cte
where not exists (
select 1
from WITESTCO.dbo.[WIBOMD] w
where w.[bomItem] = cte.[STOCK NO]
and w.[bomRev] = cte.[RevControl]
and w.[bomEntry]= cte.bomEntry
);
或尝试下面的代码,
Select * from customer c
Inner Join post_codes
On concat('post_codes_',c.country_id)=Post_codes.post_code_id
在比较之前删除要比较的确切代码。