取决于SQL中另一列的子查询的列



好吧,我对SQL和数据库相对较新。在过去的两个月左右的时间里,我一直在学习SQLite,现在我在工作中使用了SQL 2008。我遇到了一个问题,理论上不应该很难,但是我用SQL的语法和结构遇到了砖墙。

我以为我已经习惯了它背后的逻辑,但是后来我发现的错误使我感到惊讶。因此,您可能会看到我的一系列问题。哈哈。

无论如何,这是我简而言之:

带有许多表和列的巨大数据库。

我有一个查询(Q1),它以此形式为我提供了从不同表获得的数据:

id | Info1 | Info2 | Info3 |... | InfoN
1  | ..... | ..... |  20   |... | .....
2  | ..... | ..... |  56   |... | .....
3  | ..... | ..... |  32   |... | .....
4  | ..... | ..... |  17   |... | .....
5  | ..... | ..... |  12   |... | .....
6  | ..... | ..... |  23   |... | .....

我想做的是添加另一列" date1",该列" date1"取决于以下内容:从列" ID"中获取另一个为我提供数据的查询(Q2)(在这里我使用第二行,其中ID= 2):

id | Date1 | Date2 | ... | OtherinfoN | Qty 
2  | 03/25 | ..... | ... | .......... | 10
2  | 03/27 | ..... | ... | .......... | 6
2  | 03/26 | ..... | ... | .......... | 54
2  | 03/30 | ..... | ... | .......... | 2

现在,此查询的数据由" date2"列排序的数据。话虽如此,我想使用原始表中的" info3"数据(对于ID = 2,将是Info3 = 56)来弄清楚" date1"的QTY加起来或超过此信息3数字。

阐明我在说什么:

  • 我会从顶部开始查看数量。
  • 做10 = 56,否。
  • 然后移至下一行,执行10 6 = 56,否。
  • 然后移至下一行,做10 6 54 = 56,是的!
  • 停止,查看" date1",那将是第一列中" date1"列的值。(03/26)

因此,最终结果应该给我我要查询3(Q3):

id | Info1 | Info2 | Info3 |... | InfoN | Date1
1  | ..... | ..... |  20   |... | ..... | .....
2  | ..... | ..... |  56   |... | ..... | 03/26
3  | ..... | ..... |  32   |... | ..... | .....
4  | ..... | ..... |  17   |... | ..... | .....
5  | ..... | ..... |  12   |... | ..... | .....
6  | ..... | ..... |  23   |... | ..... | .....

希望我能使自己清晰。

我认为结构看起来像这样:

SELECT (Columns from Q1), Date1 
FROM (SELECT etc from Q1) 
JOIN (SELECT etc from Q2 maybe more nested SELECT statements)

,但显然我不知道SQL足以完成这项工作。尝试学习新知识并在高质量水平上应用它真的很棘手。

如果有人可以帮助我解决我的问题的任何部分,我将不胜感激。我非常擅长将不同的解决方案拼凑在一起。因此,我会接受任何建议。

看起来您想在Q2中的QTY总数中找到记录大于Q1的Info3值。

窗口函数非常方便这种查询:

select *
from   (
          select Q1.*,
                 Q2.Date1,
                 sum( Q2.Qty ) over( partition by Q2.id order by Q2.Date1 ) as running_total
          from   Q1
                 left join
                 Q2
                 on Q1.id = Q2.id
       ) as running_total_query
 where running_total >= info3

示例SQL小提琴

最新更新