Ситуация с суммой

Вы можете использовать myadzel Patternizer jQuery плагин для достижения этого эффекта в браузерах.

Вы используете Patternizer, добавляя class="background-clip" к HTML-элементам, где вы хотите, чтобы текст был нарисован как шаблон изображения, и укажите изображение в дополнительном атрибуте data-pattern="…". См. Источник демонстрации . Patternizer создаст изображение SVG с заполненным шаблоном текстом и подпишет его прозрачно отображаемому HTML-элементу.

Если, как и в примере с образцом вопроса, шаблон заполнения текста должен быть частью фонового изображения, расширяющегося за пределами «узорного» элемента, я вижу два варианта (непроверенный, мой любимый первый):

  • Используйте маскирование вместо фонового изображения в SVG. Как и в ответе web-tiki , к которому с помощью Patternizer будет добавлена ​​автоматическая генерация SVG и невидимый элемент HTML сверху, что позволяет выбирать и копировать текст.
  • Или использовать автоматическую выравнивание изображения шаблона. Может быть сделано с кодом JavaScript, аналогичным тому, который был в ответом Gijs .

1
задан Skn 15 January 2019 в 18:34
поделиться

4 ответа

Путем объединения двух таблиц и фильтрации:

select distinct t1.id from t1 inner join t2
on t2.t1id = t1.id
where
  (t2.category in ('Veggie','Fruits') and t2.date_distributed is null)
  or
  (t2.category not in ('Veggie','Fruits')); 

В таблице t2 не ясно, как называется столбец, содержащий идентификатор из t1, поэтому я использовал t2.t1id

0
ответ дан forpas 15 January 2019 в 18:34
поделиться

Вы можете использовать логику Not Exists с помощью multiplication двух слагаемых:

  1. decode(Category,'Veggie',1,'Fruits',1,0) - это Zero, т. Е. Not Veggie/Fruits или

  2. nvl2(Date_Distributed,1,0) является Zero ( ноль ), то есть Not Distributed

    with T2( T2_ID, Category, Date_Distributed, T1_ID ) as
    (
     select '01','Veggie', date'2018-01-01', 1 from dual union all   
     select '02','Fruits', date'2018-01-03', 1 from dual union all   
     select '03','Veggie',      null       , 2 from dual union all   
     select '04','Nuts'  , date'2018-01-05', 2 from dual union all   
     select '05','Fruits',      null       , 3 from dual union all   
     select '06','Seeds' , date'2018-01-10', 3 from dual union all    
     select '07','Veggie',      null       , 4 from dual union all   
     select '08','Veggie', date'2018-01-11', 5 from dual union all   
     select '09','Veggie',      null       , 5 from dual union all   
     select '10','Fruit' , date'2018-01-12', 5 from dual union all   
     select '11','Fruit' ,      null       , 5 from dual union all   
     select '12','Nuts'  , date'2018-01-15', 6 from dual union all   
     select '13','Seeds' , date'2018-01-22', 6 from dual union all   
     select '14','Nuts'  ,      null       , 7 from dual 
    )
    select T1_ID       
      from T2 
     group by T1_ID
     having sum(decode(Category,'Veggie',1,'Fruits',1,0)*nvl2(Date_Distributed,1,0))=0
     order by T1_ID;
    
    T1_ID
    -----
      2
      3
      4
      6
      7
    
  3. [ 1119]

    Между прочим, нет необходимости объединяться с T1. Если вы хотите использовать таблицу T1, строку from T2 можно заменить на from T1 join T2 on T1.ID = T2.T1_ID.

    Rextester Demo

0
ответ дан Barbaros Özhan 15 January 2019 в 18:34
поделиться

На самом деле вы хотите ID с, для которых не существует распределены вегетарианские или фруктовые.

Таким образом, вы используете NOT EXISTS и в подзапросе вы рассматриваете только записи в категориях с date_distributed is NOT null

select *
from t1
where NOT exists (select null
              from t2
              where t2.t1id = t1.id and
                    t2.category in ('Veggie','Fruits') and
                    t2.date_distributed is NOT null
             );

        ID
----------
         2
         3
         4
         6
         7
0
ответ дан Marmite Bomber 15 January 2019 в 18:34
поделиться

Если я правильно следую логике, на ум приходит exists:

select *
from t1
where exists (select 1
              from t2
              where t2.id = t1.id and
                    t2.category in ('Veggie','Fruits') and
                    t2.date_distributed is null
             ) or
      not exists (select 1
                  from t2
                  where t2.id = t1.id and
                        t2.category in ('Veggie','Fruits') 
                 ) ;

РЕДАКТИРОВАТЬ:

Я неправильно прочитал данные из-за первоначального форматирования вопроса. Для вашего вопроса я буду следовать тому же подходу:

select *
from t1
where not exists (select 1
                  from t2
                  where t2.t1_id = t1.id and
                        t2.category in ('Veggie','Fruits') and
                        t2.date_distributed is not null
                 ) ;

Вы, кажется, хотите t1.id, где они не находятся в указанных категориях с датой распространения.

0
ответ дан Gordon Linoff 15 January 2019 в 18:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: