Запрос логический и оператор if

0

так что у меня есть имя таблицы отчета, как это

No(autoincrement)       Code       Stats(bool)
--------------------------------------
       1                 F01        0
       2                 F02        0
       3                 F03        0
       4                 F03        1
       5                 F03        1
       6                 F04        1
       7                 F04        0

поэтому сценарий, если код имеет значение для статистики, является true, а затем отображает их все, и если код не имеет значения true, тогда отображается только false, поэтому результат, который я хочу, (примечание: у одного кода всегда есть 1 запись для значения false)

No(autoincrement)           Code       Stats
--------------------------------------------
           1                  F01        0
           2                  F02        0
           4                  F03        1
           5                  F03        1
           6                  F04        1

потому что f01 и f02 не имеют значения stats true, а затем показывают их и для случаев f03 и f04, потому что имеют значение true для stat, отображают их все true и игнорируют ложное значение

так как запрос для получения результата

  • 0
    Какие базы данных вы используете?
  • 0
    Я использую MySQL для моей базы данных
Показать ещё 1 комментарий
Теги:

2 ответа

1
Лучший ответ

Кажется, вам нужна DENSE_RANK()

select * from
(
    select *,
            dense_rank() over (partition by Code order by Stats desc) Seq
    from table t
) t
where Seq = 1

Если вы не хотите идти с формой subquery, вы можете исследовать вышеуказанные вещи через TOP со связками, доступными в SQL Server

select top 1 with ties [No(autoincrement)], Code, [Stats(bool)]
from table t
order by dense_rank() over (partition by Code order by [Stats(bool)] desc)

Поскольку MySQL не имеет аналитической функции. Итак, вы можете исследовать эти вещи через UNION ALL

select * 
from table t
where exists (
    select 1 from table
    where autoincrement  = t.autoincrement  and Stats = 1
) UNION ALL 
select * 
from table t
where not exists (
    select 1 from table
    where code = t.code and Stats = 1) 
ORDER BY 1
  • 0
    как использовать density_rank, если я использую mysql для запроса
  • 0
    Что такое 1 из 1 выбора?
Показать ещё 1 комментарий
0
SELECT No,Code,Stats FROM
(SELECT No,Code,Stats,
  Case when @Code = t.Code Then
            Case when @stats != t.stats  Then
                 @DenseRank := @DenseRank + 1
            ELSE
                 @DenseRank := 1
            END
   Else
      @DenseRank := 1 
   END as DenseRank,
  @Code :=t.code as VarCode,
  @stats :=t.stats as varstatus
  FROM Table1 t join
  (Select @DenseRank := 1,@Code := '',@stats := '' )r
Order BY CODE,Stats DESC)
AS T1
WHERE
DenseRank=1
Order BY CODE,Stats DESC;

Выход

No  Code    Stats
1   F01     0
2   F02     0
4   F03     1
5   F03     1
6   F04     1

демонстрация

http://sqlfiddle.com/#!9/f868a/3

Ещё вопросы

Сообщество Overcoder
Наверх
Меню