比较月份数据,找出SQL的差异

问题描述 投票:0回答:1

如何从同一个表中动态计算月月差异。

我有下表,我试图比较FT(全职员工)和TE(总员工)每个月(每月比较01到12)并找到差异。如果FT超过该月的TE,则显示ID,公司,FT和TE通过。任何人都可以帮我解决这个问题。

<!DOCTYPE html>
<html>
<head>
<style>
table, th, td {
  border: 1px solid black;
  border-collapse: collapse;
}
th, td {
  padding: 5px;
  text-align: left;    
}
</style>
</head>
<body>

<p>FT = Full Time Employee <br>
TE = Total Employee <br>
01-12 = month
</p>

<table style="width:100%">
  <tr>
    <th>ID</th>
    <th>Company</th>
    <th>FT01</th>
    <th>FT02</th>
    <th>FT03</th>
    <th>FT04</th>
    <th>FT05</th>
    <th>FT06</th>
    <th>FT07</th>
    <th>FT08</th>
    <th>FT09</th>
    <th>FT10</th>
    <th>FT11</th>
    <th>FT12</th>
    <th>TE01</th>
    <th>TE02</th>
    <th>TE03</th>
    <th>TE04</th>
    <th>TE05</th>
   <th>TE06</th>
    <th>TE07</th>
   <th>TE08</th>
   <th>TE09</th>
   <th>TE10</th>
    <th>TE11</th>
    <th>TE12</th>
    
  </tr>
  <tr>
    <td>100</td>
    <td>A</td>
    <td>3</td>
    <td>3</td>
    <td>3</td>
    <td>3</td>
    <td>3</td>
    <td>3</td>
    <td>3</td>
    <td>3</td>
    <td>3</td>
    <td>3</td>
    <td>3</td>
    <td>3</td>
    <td>4</td>
    <td>4</td>
    <td>4</td>
    <td>4</td>
    <td>4</td>
    <td>4</td>
    <td>4</td>
    <td>4</td>
    <td>4</td>
    <td>4</td>
    <td>4</td>
    <td>4</td>
  </tr>
    <tr>
    <td>101</td>
    <td>B</td>
    <td>5</td>
    <td>5</td>
    <td>5</td>
    <td>5</td>
    <td>5</td>
    <td>5</td>
    <td>5</td>
    <td>5</td>
    <td>5</td>
    <td>5</td>
    <td>5</td>
    <td>5</td>
    <td>5</td>
    <td>5</td>
    <td>5</td>
    <td>5</td>
    <td>5</td>
    <td>5</td>
    <td>5</td>
    <td>5</td>
    <td>5</td>
    <td>5</td>
    <td>5</td>
    <td>5</td>
  </tr>
      <tr>
    <td>102</td>
    <td>C</td>
    <td>7</td>
    <td>7</td>
    <td>7</td>
    <td>7</td>
    <td>7</td>
    <td>7</td>
    <td>7</td>
    <td>7</td>
    <td>7</td>
    <td>7</td>
    <td>7</td>
    <td>7</td>
    <td>6</td>
    <td>6</td>
    <td>6</td>
    <td>6</td>
    <td>6</td>
    <td>6</td>
    <td>6</td>
    <td>6</td>
    <td>6</td>
    <td>6</td>
    <td>6</td>
    <td>6</td>
  </tr>
  
</table>

</body>
</html>

enter image description here

sql database data-analysis
1个回答
1
投票

将问题分解成部分!

这个问题实际上是几个“我怎么做?”的问题,其中的问题几乎相当于“为我编写代码”请求。

所以,相反,我将帮助解决第一个问题:数据结构。

你有一个非规范化的表,虽然重组数据库会有所帮助,但有时却无法做到这一点。但是,如果您可以将数据转化为规范化的内容,则可以使查询更容易。

那就让我们这样做吧!

如果表格如下所示,问题会更容易:

ID
Company
MonthNum
TotalEmployees
FullTimeEmployees

...所以让我们编写一个查询,以这种格式获取数据:

select ID, Company, 1 as MonthNum, TE01 as TotalEmployees, FT01 as FullTimeEmployees from ...
UNION ALL
select ID, Company, 2 as MonthNum, TE02 as TotalEmployees, FT02 as FullTimeEmployees from ...
UNION ALL
select ID, Company, 3 as MonthNum, TE03 as TotalEmployees, FT03 as FullTimeEmployees from ...
-- etc, going up to 12.

现在,我们可以通过将其用作子查询来对该数据执行查询:

select WhateverColumns from
(
   -- that query from the previous section
) as normalizedData
where WhateverConditionsYouWant

合理?将问题分解为具体步骤,然后开始解决这些步骤。第一个是以更容易使用的格式获取数据,并展示了如何解决这个问题。现在,您需要继续编写查询以获取您所追踪的特定数据。祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.