sql - 根据别名增量值连接两个 SQL 表
问题描述
我有一个名为 @myTable 的表,它返回一个名为 am_id 的循环增量值。我将一些带有 ID 的变量存储在另一个名为 @myTableVariable 的表中。
DECLARE @myTable TABLE (id INT, name varchar(20))
insert into @myTable values(1,'one '),(2,'two '),(3,'three'),(4,'four'),(5,'five'),(6,'six'),(7,'seven'),(8,'eight'),(9,'nine'),(10,'ten'),(11,'eleven'),(12,'twelve'),(13,'thirteen')
DECLARE @myTableVariable TABLE (id INT, name varchar(20))
insert into @myTableVariable values(1,'Roberto'),(2,'Gail'),(3,'Dylan'),(4,'Ben')
select * from @myTableVariable
declare @start decimal(10)=1;
declare @end decimal(10)=4;
declare @increment decimal(10)=1;
SELECT f.name, (@start + @increment * (row_number() over (order by id) - 1) % cast(1 + round((@end - @start) / @increment, 0) as int)) AS am_id
FROM @myTable AS f
我想加入@myTable.am_id = @myTableVariable.id 上的两个表,但是无法使用别名加入...
SELECT f.name, (@start + @increment * (row_number() over (order by id) - 1) % cast(1 + round((@end - @start) / @increment, 0) as int)) AS am_id
FROM @myTable AS f
LEFT JOIN @myTableVariable AS v ON v.vid = am_id
有什么想法可以加入这些表格吗?
非常感谢
解决方案
使用子查询然后加入
SELECT * FROM (
SELECT name, (@start + @increment * (row_number() over (order by id) - 1) % cast(1 + round((@end - @start) / @increment, 0) as int)) AS am_id
FROM @myTable) AS f
LEFT JOIN @myTableVariable AS v ON v.id = f.am_id
推荐阅读
- r - 如何在列表中的数据框之间有条件地更改列类型?
- ruby-on-rails - 在 Ruby on Rails 中清除或实现表
- python - 如何继续查看 Spotify 上当前正在播放的歌曲以查看它是否发生了变化
- angular - 创建服务器发送事件并使用 MogoDB 更改流时,我在刷新浏览器时得到附加的数据重复
- sql - 获取给定日期表中的最新记录
- django - form.is_valid 是 False 但 form.error 不是
- c# - 在 AvalonDock 中,我如何确定布局是否“脏”
- discord - 有没有办法只显示公会图标,如果它存在而不是使用 if else 语句?
- java - Gson:反序列化和“扩展”一个巨大的 JSON
- json - HTTParty + JSON-LD Content-Type 响应