【问题标题】:SQL: Use values stored in table_1 to populate a column in table_2 based on a variable listed in table_2SQL:使用存储在 table_1 中的值根据 table_2 中列出的变量填充 table_2 中的列
【发布时间】:2012-12-24 01:04:02
【问题描述】:

我对 sql 很陌生,在学校上课,但它非常基础。我有 2 个表我想以某种方式链接在一起,但不知道从哪里开始。我有一个月表,列出了该月的员工和已完成的服务电话。每个员工的每次通话和通话类型的报酬都不同。所以我有一个佣金表,列出了每个员工、服务电话的类型,并且列中的数据是每个员工为每种不同类型的电话所做的美元金额。我想链接每个表中的员工 ID,以便我可以做这样的事情......

SELECT sum(TypeOfCall) as "Total Commission" 
from December
where TypeOfCall='abc' and EmployeeID='John';

但存储在TypeOfCall 列中的MothTable 中的数据是一个变量,如“abc”或“cdf”,每个变量都在CommissionsTable 中列出并赋予一个值。如何使用CommissionsTable 中列出的值获得MonthTableTypeOfCall 列的总和?

实际的表、列和类型如下:

CREATE TABLE "December" (
    "EmployeeID" INTEGER NOT NULL,
    "InvoiceType" VARCHAR (6),
    "DR" VARCHAR (8),
    "TypeOfCall" VARCHAR (6),
    "CommissionType" VARCHAR (6),
    "Date DD/MM/YY" VARCHAR (10),
    "InvoiceNumber" INTEGER,
    "InvoiceAmount" FLOAT (6),
    "KeyCode" VARCHAR(20)
)

还有……

CREATE TABLE "Commissions" (
    "EmployeeID" VARCHAR(25) PRIMARY KEY  NOT NULL UNIQUE,
    "T3" INTEGER NOT NULL,
    "T5" INTEGER NOT NULL,
    "T7" INTEGER NOT NULL,
    "7B" INTEGER NOT NULL,
    "Other10" INTEGER NOT NULL,
    "Other12" INTEGER NOT NULL,
    "Other13" INTEGER NOT NULL,
    "Other14" INTEGER NOT NULL,
    "Other15" INTEGER NOT NULL
)

【问题讨论】:

  • 对于实际上是 ServiceCall 表的名称,月份表是一个糟糕的选择...
  • 你能给我们这两个表以及它们各自的列和类型吗?

标签: sql database sqlite


【解决方案1】:

您真正需要的是SUM(CommissionsTable.value)(替换正确的列名)在月份表和CommissionsTable 之间使用INNER JOIN

SELECT
  December.TypeOfCall,
  SUM(CommissionsTable.value) AS "Total Commission"
FROM
  December
  /* Substitute the correct column name for ComissionsTable.TypeOfCall */
  INNER JOIN CommissionsTable WHERE December.TypeOfCall = CommissionsTable.TypeOfCall
WHERE
  December.TypeOfCall = 'abc' 
  AND EmployeeID = 'John'
/* GROUP BY needed if you were retrieving more than just 'abc' */
GROUP BY December.TypeOfCall

然而,每个月都有一个单独的表格是合适的。相反,列表调用的表格应该包含每个调用的日期值,以及它的类型和EmployeeID。比如:

CREATE TABLE calls (
  EmployeeID VARCHAR(32) NOT NULL,
  TypeOfCall CHAR(3) NOT NULL,
  CallDate INTEGER NOT NULL
)

【讨论】:

    【解决方案2】:

    在一个或多个表中调用表存储记录取决于记录的数量和数据保存时间,如果acount非常大,分区或多表是不错的选择。 在 12 月创建索引。TypeOfCall 可能会调整性能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2021-11-14
      相关资源
      最近更新 更多