我有一个交易表,其中包含一列transactionId
,其值类似于|H000021|B1|
。
我需要与表Category
进行联接,该表的列CategoryID
的值类似于H000021
。
除非数据相同,否则我无法申请加入。
因此,我想拆分或删除TransctionId
中包含的不必要数据,以便我可以联接两个表。
请帮助我解决问题。
答案 0 :(得分:2)
您应该修复数据,以使列相同。但是有时我们会陷入别人的错误设计决定中。特别是,交易数据应包含类别的列-即使该类别是ID的一部分。
无论如何:
select . . .
from transaction t join
category c
on transactionid like '|' + categoryid + |%';
或者类别ID始终为7个字符:
select . . .
from transaction t join
category c
on categoryid = substring(transactionid, 2, 7)
答案 1 :(得分:1)
您可以使用查询:
CREATE TABLE #MyTable
(PrimaryKey int PRIMARY KEY,
KeyTransacFull varchar(50)
);
GO
CREATE TABLE #MyTransaction
(PrimaryKey int PRIMARY KEY,
KeyTransac varchar(50)
);
GO
INSERT INTO #MyTable
SELECT 1, '|H000021|B1|'
INSERT INTO #MyTable
SELECT 2, '|H000021|B1|'
INSERT INTO #MyTransaction
SELECT 1, 'H000021'
SELECT * FROM #MyTable
SELECT * FROM #MyTransaction
SELECT *
FROM #MyTable
JOIN #MyTransaction ON KeyTransacFull LIKE '|'+KeyTransac+'|%'
DROP TABLE #MyTable
DROP TABLE #MyTransaction
答案 2 :(得分:1)
仅使用代码创建计算列。
初始方案:
create table Transactions
(
transactionId varchar(12) primary key,
whatever varchar(100)
)
create table Category
(
transactionId varchar(7) primary key,
name varchar(100)
)
insert into Transactions
select'|H000021|B1|', 'Anything'
insert into Category
select 'H000021', 'A category'
添加计算列:
alter table Transactions add transactionId_code as substring(transactionid, 2, 7) persisted
使用新的计算列加入:
select *
from Transactions t
inner join Category c on t.transactionId_code = c.transactionId
获取直观的查询计划: