Сравните данные за месяц и найдите разницу в SQL - PullRequest
0 голосов
/ 21 марта 2019

Как динамически рассчитать разницу между месяцами из той же таблицы.

У меня есть таблица ниже, и я пытаюсь сравнивать FT (полный рабочий день) и TE (общий сотрудник) для каждого месяца (ежемесячное сравнениеС 01 по 12) и найди разницу.Если FT превышает TE для этого месяца, тогда отображается ID, Company, 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

1 Ответ

1 голос
/ 22 марта 2019

Разбейте проблему на части!

Этот вопрос на самом деле состоит из нескольких вопросов "Как мне?", В которые вопрос почти сводится к "Написать этот код"для меня "запрос.

Итак, вместо этого я собираюсь помочь с первой проблемой: структура данных.

У вас есть ненормализованная таблица, и во время реструктуризациибаза данных поможет, иногда это невозможно сделать.Но если бы вы могли преобразовать данные во что-то нормализованное, это сделало бы запрос на лот проще.

Так что давайте сделаем это!

Проблема была бы намного прощеесли таблица выглядит следующим образом:

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

Имеет смысл?Разбейте проблему на конкретные шаги, а затем начните решать шаги.Первый - получить данные в формате, с которым легче работать, и я показал, как это решить.Теперь вам нужно продолжить написание запроса, чтобы получить конкретные данные, которые вы ищете.Желаем удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...