【发布时间】:2017-03-04 20:42:52
【问题描述】:
好的,我对 SQL 和数据库比较陌生。过去两个月左右我一直在学习 SQLite,现在我在工作中使用 MS SQL 2008。我遇到了一个理论上应该不难的问题,但是我遇到了 SQL 的语法和结构的难题。
我以为我已经习惯了它背后的逻辑,但后来我遇到的错误让我大吃一惊。因此,您可能会在 SO 上看到我提出的一系列问题。哈哈。
无论如何,简而言之,这就是我所拥有的:
包含许多表和列的庞大数据库。
我有一个查询 (Q1),它以这种形式为我提供从不同表中获取的数据:
id | Info1 | Info2 | Info3 |... | InfoN
1 | ..... | ..... | 20 |... | .....
2 | ..... | ..... | 56 |... | .....
3 | ..... | ..... | 32 |... | .....
4 | ..... | ..... | 17 |... | .....
5 | ..... | ..... | 12 |... | .....
6 | ..... | ..... | 23 |... | .....
我想做的是添加另一列“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)来确定 Qty 在什么“Date1”加起来或超过这个 Info3数字。
拼出我在说什么:
- 我会从顶部开始查看数量。
- 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 的了解不足以完成这项工作。尝试学习新知识并以高质量水平应用它真的很棘手。
如果有人可以帮助我解决我的问题的任何部分,我将不胜感激。我非常擅长将来自不同解决方案的东西拼凑在一起。所以我会接受任何建议。
【问题讨论】:
-
第二季度的查询需要的是运行总计,选择
sum(Qty) over (partition by id order by youroderingcriteria)等于或大于的第一行
标签: sql sql-server database sql-server-2008 syntax