【问题标题】:How to add a query to a table in SQL?如何在 SQL 中向表中添加查询?
【发布时间】:2021-08-30 21:23:49
【问题描述】:

我有 3 张桌子。 为简单起见,我将它们更改为这些示例表。

table1:CorporateActionSmmary

RATE  Quantity  ProductID
--------------------------
56        0        1487
30        0        1871
40        0        8750

table2# ProductMaster

RATEGROSS  ISIN      ProductID
--------------------------
60         JP0001     1487
33         JP0002     1871
45         JP0003     8750

table3# 打开位置

Quantity        ProductID
-------------------
5              1487
1              1487
5              1487
3              1871
2              1871
4              8750
2              8750
7              8750
3              8750

首先我需要将表 2 中的 ISIN 添加到表 1 表 1:CorporateActionSmmary

RATE  Quantity  ProductID      ISIN
-------------------------------------
56        0        1487       JP0001 
30        0        1871       JP0002 
40        0        8750       JP0003 

所以,我使用了这个代码

SELECT [dbo].[CorporateActionSummary].*, [dbo].[ProductMaster].[ISIN]
FROM [dbo].[CorporateActionSummary] JOIN [dbo].[ProductMaster] ON CorporateActionSummary.ProductID = ProductMaster.ProductID

现在您可以看到 Table1 中缺少 Quantity,因此我必须将 Table3 中每个产品 ID 的所有数量相加并添加到 Table1(作为新列或覆盖 Quntity 列)

我想我可以通过下面的代码得到每个 ProductID 的 Quantity 的总和,但是如何将它添加到已经有 ISIN 列的 Table1 中

SELECT SUM(Qantity),ProductID
FROM [dbo].[OpenPositions]

我是SQL超级新手,如果可以的话请详细说明,谢谢

我正在使用 Microsoft SQL Server Management Studio

【问题讨论】:

  • first I need t add ISIN from table2 to table1 这不是您所做的或您想要的。这是错误的概念或理解。你想从数据库中检索一些信息,你写一个SELECT 查询。查询可以从多个表的多个列中检索。您可以在ON 条件中指定一个表如何JOIN 到另一个表。

标签: sql sql-server tsql join


【解决方案1】:

您可以对数量求和,然后像这样加入您的查询:

SELECT CA.*, PM.[ISIN],CA.Quantity
FROM [dbo].[CorporateActionSummary] CA
JOIN [dbo].[ProductMaster] PM
  ON CA.ProductID = PM.ProductID
JOIN (
SELECT ProductID, SUM(Qantity) Quantity
FROM [dbo].[OpenPositions]
GROUP BY ProductID
) OO
 on OO.ProductID = CA.ProductID

【讨论】:

  • 我不认为我理解你。 CA 是 [dbo].[CorporateActionSummary] ?那么这条线是什么意思呢? --> FROM [dbo].[CorporateActionSummary] CA
  • @Ksaman 我给表一个别名,并在查询中使用该别名而不是实际表名以提高可读性。
【解决方案2】:

你快到了..你只需要使用相同的逻辑来加入产品主表。但是,由于您需要总数量,因此您需要按您选择的其他列进行分组(但不是汇总)。

查询将是这样的:

SELECT 
[dbo].[CorporateActionSummary].ProductID
, [dbo].[ProductMaster].[ISIN]
,sum([OpenPosition].Quantity) as quantity

FROM [dbo].[CorporateActionSummary] 

JOIN [dbo].[ProductMaster] 
ON CorporateActionSummary.ProductID = ProductMaster.ProductID

JOIN [dbo].[OpenPosition] 
ON CorporateActionSummary.ProductID = OpenPosition.ProductID


group by 

[dbo].[CorporateActionSummary].ProductID
, [dbo].[ProductMaster].[ISIN]

如果您想为您的选择添加更多列,那么您还需要按这些列进行分组

【讨论】:

  • 您的代码适用于 [dbo].[CorporateActionSummary].ProductID,谢谢。但为什么我在 [dbo].[CorporateActionSummary].* 中出现错误。我需要从那里获取所有列。
  • 请在我的回答末尾阅读我的评论。永远不建议选择 *。仅选择您实际需要的列。如果您需要所有内容,请明确指定列。因此,如果您在选择中添加一个列,您还需要将其添加到分组中(分组依据)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多