2015-09-10 3 views
-1

Мне нужно написать код T-SQL, который будет сравнивать между T1.PercentComplete, который должен быть между T2.StageFrom и T2.StageTo. и чем получить T2.Bonus_Prec и присоединиться к Т1Сравнение между столбцами на разных таблицах

Т1:
enter image description here

Т2:
enter image description here

Желаемый результат для T2.Bonus_Prec является 0.02, поскольку T1.Percent_Complete является .27, который находится между 0 и 1.

Дело в том, что каждый Key может иметь различный T2.StageID между 1-6.
есть только один T2.StageID это будет 0. (быстрый способ узнать, что есть только 1 бонусная опция) Если у него более 1, оно начнется с 1. (при необходимости это можно изменить)

Т1:

DROP TABLE T1; CREATE TABLE T1( Key VARCHAR(10) NOT NULL PRIMARY KEY ,Percent_Complete_ NUMBER(16,2) NOT NULL ); INSERT INTO T1(Key,Percent_Complete_) VALUES ('Key Vendor',Percent_Complete); INSERT INTO T1(Key,Percent_Complete_) VALUES ('***',0.27);

Т2:
DROP TABLE T2; CREATE TABLE T2( Key VARCHAR(50) NOT NULL ,StageID INT NOT NULL ,Stage_From NUMERIC(10,2) NOT NULL ,Stage_To NUMERIC(8,2) NOT NULL ,Stage_Bonus_Prec NUMERIC(16,2) NOT NULL ); INSERT INTO T2(Key,StageID,Stage_From,Stage_To,Stage_Bonus_Prec) VALUES ('Key',Stage_Id,Stage_From,Stage_To,Stage_Bonus_Prec); INSERT INTO T2(Key,StageID,Stage_From,Stage_To,Stage_Bonus_Prec) VALUES ('***',1,0,0.8,0.02); INSERT INTO T2(Key,StageID,Stage_From,Stage_To,Stage_Bonus_Prec) VALUES ('***',2,0.8,1,0.035); INSERT INTO T2(Key,StageID,Stage_From,Stage_To,Stage_Bonus_Prec) VALUES ('***',3,1,-1,0.05);

ВЫХОД:
+-----+-------------------+--------------------+ | Key | Percent_Complete | [Stage_Bonus_Prec] | +-----+-------------------+--------------------+ | *** | 0.27 | 0.02 | +-----+-------------------+--------------------+

Вот SQLFiddle с этими значениями

+6

Здесь отличное место для начала. http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

+0

Надеюсь, теперь это лучше. Спасибо –

+0

Нет ничего подобного публикации расходных данных ddl и образцов. И это не что иное, как расходные данные ddl и sample. Задача здесь в том, что мы не знаем, что вы пытаетесь сделать, мы не знаем ваших таблиц, и мы не можем видеть вас на экране.Единственное, что мы знаем, это то, что вы опубликовали, что на данный момент почти ничего. Вы заметили часть статьи, на которую я ссылался, размещая инструкции create table и вставляя инструкции для выборочных данных? Если вы сделаете это, мы сможем помочь, иначе мы ничего не сможем сделать. –

ответ

0

Это еще не ясно, что вы пытаетесь сделать, но я сделал попытку. Обратите внимание, что я также исправил ряд проблем с данными ddl и примерами, которые вы опубликовали.

if OBJECT_ID('T1') is not null 
    drop table T1 

CREATE TABLE T1(
    KeyVendor VARCHAR(10) NOT NULL PRIMARY KEY 
    ,PercentComplete VARCHAR(16) NOT NULL 
); 
INSERT INTO T1(KeyVendor,PercentComplete) VALUES ('***','0.27'); 

if OBJECT_ID('T2') is not null 
    drop table T2 

CREATE TABLE T2(
    MyKey VARCHAR(50) NOT NULL 
    ,StageID INT NOT NULL 
    ,Stage_From NUMERIC(10,0) NOT NULL 
    ,Stage_To NUMERIC(8,0) NOT NULL 
    ,Stage_Bonus_Prec NUMERIC(16,3) NOT NULL 
); 
INSERT INTO T2(MyKey,StageID,Stage_From,Stage_To,Stage_Bonus_Prec) VALUES ('***',1,0,0.8,0.02); 
INSERT INTO T2(MyKey,StageID,Stage_From,Stage_To,Stage_Bonus_Prec) VALUES ('***',2,0.8,1,0.035); 
INSERT INTO T2(MyKey,StageID,Stage_From,Stage_To,Stage_Bonus_Prec) VALUES ('***',3,1,-1,0.05); 

select * 
from T1 
cross apply 
(
    select top 1 Stage_Bonus_Prec 
    from T2 
    where t1.PercentComplete >= t2.Stage_Bonus_Prec 
     and t1.KeyVendor = t2.MyKey 
    order by Stage_Bonus_Prec 
) x 
+0

Спасибо. Я попробую это и отчитаюсь здесь. Если это еще не ясно, я постараюсь сделать это просто. У меня есть таблица бонусов (T2) с бонусным уровнем (между 1-6, может быть 1-2 или 1-4) и таблица производительности (T1) Я хочу получить «Stage_Bonus_Prec» из таблицы в соответствии с производительность T1 'PercentComplete' –

0

Принимая выстрел в это так же, так как это все еще немного неясно:

SELECT t1.percent_complete, t2.Stage_Bonus_Prec 
FROM T1 INNER JOIN T2 
    ON T1.[key vendor] = T2.[Key] AND 
    T1.[percent_complete] BETWEEN T2.Stage_From AND T2.Stage_To 

Присоединение T1 и T2 на [Key Vendor] и [Key] и с помощью оператора BETWEEN найти значение percent_complete, что находится между Stage_From и Stage_To.

Я думаю, что меня все еще не хватает, так как я все еще смущен, где Key Значение *** происходит из ваших желаемых результатов.

SQLFiddle of this in action, основанный на слегка фиксированной версии вашего DDL (вы помещаете свои имена полей в свою собственную запись данных, я удалил их, так как они там не принадлежат).