使用来自其他 table 的数据丰富 table
Enrich table with data from other table
目前我有 2 个表:一个包含客户数据 (CLIENT_TABLE),另一个包含礼品卡信息 (GIFTCARD_TABLE)。
GIFTCARD_TABLE 包含 100 行,它有 2 列:Card_Number 和 Pin_Code。
现在我需要使用 GIFTCARD_TABLE 中的 2 列来丰富 CLIENT_TABLE(35 行),因此每个客户都需要一个 card_number 及其对应的 pin_code哪个并不重要(只是不要使用相同的卡号 & pin_code 两次)。
因为这些表没有任何我可以使用的键,我不知道我该怎么做。
有什么解决办法的建议吗?
亲切的问候
示意图(我在 Teradata 语法中可能不正确):
UPDATE
-- this table copy will be updated
CLIENT_TABLE c1
-- this CTE enumerates clients, join enumerates rows in 1st copy
JOIN ( SELECT id, ROW_NUMBER() OVER (ORDER BY id) rn
FROM CLIENT_TABLE ) c2 ON c1.id = c2.id
-- this CTE enumerates cards, join assigns card to client one-to-one by the `rn` number
JOIN ( SELECT *, ROW_NUMBER() OVER (ORDER BY Card_Number) rn
FROM GIFTCARD_TABLE ) g ON c2.rn = g.rn
SET c1.Card_Number = g.Card_Number,
c1.Pin_Code = g.Pin_Code;
如果您想真正随机分配卡片,您需要:
select *
from
( -- random row_numbers
select dt.*,
row_number() over (order by rnd) as rn
from
( -- 35 random clients
select t.*, random(1,1000000000) as rnd
from CLIENT_TABLE as t
sample randomized allocation 35
) as dt
) as client
join
( -- random row_numbers
select dt.*,
row_number() over (order by rnd) as rn
from
(
select t.*, random(1,1000000000) as rnd
from GIFTCARD_TABLE as t
) as dt
) as card
on client.rn = card.rn
RANDOM不能直接用在ROW_NUMBER.
目前我有 2 个表:一个包含客户数据 (CLIENT_TABLE),另一个包含礼品卡信息 (GIFTCARD_TABLE)。
GIFTCARD_TABLE 包含 100 行,它有 2 列:Card_Number 和 Pin_Code。
现在我需要使用 GIFTCARD_TABLE 中的 2 列来丰富 CLIENT_TABLE(35 行),因此每个客户都需要一个 card_number 及其对应的 pin_code哪个并不重要(只是不要使用相同的卡号 & pin_code 两次)。
因为这些表没有任何我可以使用的键,我不知道我该怎么做。
有什么解决办法的建议吗?
亲切的问候
示意图(我在 Teradata 语法中可能不正确):
UPDATE
-- this table copy will be updated
CLIENT_TABLE c1
-- this CTE enumerates clients, join enumerates rows in 1st copy
JOIN ( SELECT id, ROW_NUMBER() OVER (ORDER BY id) rn
FROM CLIENT_TABLE ) c2 ON c1.id = c2.id
-- this CTE enumerates cards, join assigns card to client one-to-one by the `rn` number
JOIN ( SELECT *, ROW_NUMBER() OVER (ORDER BY Card_Number) rn
FROM GIFTCARD_TABLE ) g ON c2.rn = g.rn
SET c1.Card_Number = g.Card_Number,
c1.Pin_Code = g.Pin_Code;
如果您想真正随机分配卡片,您需要:
select *
from
( -- random row_numbers
select dt.*,
row_number() over (order by rnd) as rn
from
( -- 35 random clients
select t.*, random(1,1000000000) as rnd
from CLIENT_TABLE as t
sample randomized allocation 35
) as dt
) as client
join
( -- random row_numbers
select dt.*,
row_number() over (order by rnd) as rn
from
(
select t.*, random(1,1000000000) as rnd
from GIFTCARD_TABLE as t
) as dt
) as card
on client.rn = card.rn
RANDOM不能直接用在ROW_NUMBER.