Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在Cognos中操作,这将由另一个团队进行,我需要提供一个查询,让他们得到在#Scores中找到的结果集。 SELECT Alpha, Beta, @Sigma = (result of block above) FROM MyTable DECLAR_Sql Server_Variables_Codeblocks_Sql Server 2016_Cognos - Fatal编程技术网

Sql server 在Cognos中操作,这将由另一个团队进行,我需要提供一个查询,让他们得到在#Scores中找到的结果集。 SELECT Alpha, Beta, @Sigma = (result of block above) FROM MyTable DECLAR

Sql server 在Cognos中操作,这将由另一个团队进行,我需要提供一个查询,让他们得到在#Scores中找到的结果集。 SELECT Alpha, Beta, @Sigma = (result of block above) FROM MyTable DECLAR,sql-server,variables,codeblocks,sql-server-2016,cognos,Sql Server,Variables,Codeblocks,Sql Server 2016,Cognos,在Cognos中操作,这将由另一个团队进行,我需要提供一个查询,让他们得到在#Scores中找到的结果集。 SELECT Alpha, Beta, @Sigma = (result of block above) FROM MyTable DECLARE @Goal AS decimal(5,4) = 0.7085 DECLARE @StarScore AS decimal(3,2) = 0.00 DECLARE @Q1Start AS date DECLARE @Q2Start AS d

在Cognos中操作,这将由另一个团队进行,我需要提供一个查询,让他们得到在#Scores中找到的结果集。
SELECT Alpha, Beta, @Sigma = (result of block above) 
FROM MyTable
DECLARE @Goal AS decimal(5,4) = 0.7085
DECLARE @StarScore AS decimal(3,2) = 0.00
DECLARE @Q1Start AS date 
DECLARE @Q2Start AS date 
DECLARE @Q3Start AS date 
DECLARE @Q4Start AS date 
DECLARE @CurrentMonth AS int = MONTH(current_timestamp)
DECLARE @FirstOfCurrentMonth AS date =  CAST(DATEADD(DAY,-DAY(GETDATE())+1, CAST(GETDATE() AS DATE)) AS DATETIME)
DECLARE @Q1TBS as decimal(5,4)
DECLARE @Q1TBC As decimal(5,0)
DECLARE @Q1TBD as decimal(5,0)

DECLARE @Q2TBS as decimal(5,4)
DECLARE @Q2TBC As decimal(5,0)
DECLARE @Q2TBD as decimal(5,0)

DECLARE @Q3TBS as decimal(5,4)
DECLARE @Q3TBC As decimal(5,0)
DECLARE @Q3TBD as decimal(5,0)

DECLARE @Q4TBS as decimal(5,4)
DECLARE @Q4TBC As decimal(5,0)
DECLARE @Q4TBD as decimal(5,0)

DECLARE @Baseline decimal(5,4) 
DECLARE @BaselineC As decimal(5,0)
DECLARE @BaselineD as decimal(5,0)
DECLARE @Score as decimal(3,2) = 0.00
DECLARE @Unit as varchar(20) = '  '
DECLARE @UnitName as varchar(50) = ' '

DECLARE @TempCount As Int = 9999

-- Define current rolling 4 quarters. Q4 is the current quarter, Q3-Q1 progressively 1 quarter back. 
IF @CurrentMonth in (1,4,7,10) 
    -- PRINT @FirstofCurrentMonth
    SET @Q1Start = DATEADD(month,-9,@FirstOfCurrentMonth)
    SET @Q2Start = DATEADD(month,3,@Q1Start)
    SET @Q3Start = DATEADD(month,3,@Q2Start)--DATEADD(month,-3,@FirstOfCurrentMonth)
    SET @Q4Start = DATEADD(month,3,@Q3Start) -- DATEADD(month,-1,@FirstOfCurrentMonth)
IF @CurrentMonth in (2,5,8,11) 
    -- PRINT 'First of Current Month ' + cast(@FirstofCurrentMonth AS varchar(20))
    SET @Q1Start = DATEADD(month,-10,@FirstOfCurrentMonth)
    -- PRINT 'Q1 ' + CAST(@Q1Start AS VARCHAR(10))
    SET @Q2Start = DATEADD(month,3,@Q1Start) -- DATEADD(month,-7,@FirstOfCurrentMonth)
    -- PRINT 'Q2 ' + CAST(@Q2Start AS VARCHAR(10))
    SET @Q3Start = DATEADD(month,3,@Q2Start) -- -4,@FirstOfCurrentMonth)
    -- PRINT 'Q3 ' + CAST(@Q3Start AS VARCHAR(10))
    SET @Q4Start = DATEADD(month,3,@Q3Start)
    -- PRINT 'Q4 ' + CAST(@Q4Start AS VARCHAR(10))
IF @CurrentMonth in (3,6,9,12) 
    SET @Q1Start = DATEADD(month,-11,@FirstOfCurrentMonth)
    SET @Q2Start = DATEADD(month,-8,@FirstOfCurrentMonth)
    SET @Q3Start = DATEADD(month,-5,@FirstOfCurrentMonth)
    SET @Q4Start = DATEADD(month,-2,@FirstOfCurrentMonth)

-- create temp table to hold results   

CREATE TABLE #Scores (
Unit varchar(20),
UnitName varchar(50),
StarScore decimal(3,2)
)

set rowcount 0

SELECT DISTINCT TOP 10 NULL UnitKey,UNIT_NBR As Unit, UNIT_NM AS UnitName into #Units FROM TableA
WHERE Unit_NBR IS NOT NULL

set rowcount 1
update #Units set UnitKey = 1

--- START CALCULATIONS

while @TempCount > 0
        begin
            set rowcount 0
            select @Unit = Unit, @UnitName = UnitName from #Units WHERE UnitKey = 1
            SELECT @TempCount = Count(*) FROM #Units
            PRINT 'TempCount ' + cast(@TempCount AS varchar(10))

        -- Baseline defined as 2016 annual score for the unit

        SET @BaselineD = (SELECT count(r.[PROPERTY]) FROM TableR r
        JOIN TableD d ON r.ITEM_NBR = d.UNIQUE_ID
        JOIN TableA a on r.ITEM_NBR = a.ITEM_NBR
        WHERE a.UNIT_NBR = @Unit AND r.WIDGET_CD = 'XYZ' AND d.ISSUE_DATE between  '2016-01-01' AND '2016-12-31')
        -- -- PRINT '2016 total' + cast(@BaselineD AS varchar(5))

        SET @BaselineC = (SELECT count(r.[PROPERTY]) FROM TableR r   
        JOIN TableD d ON r.ITEM_NBR = d.UNIQUE_ID
        JOIN TableA a on r.ITEM_NBR = a.ITEM_NBR
        WHERE a.UNIT_NBR = @Unit AND r.WIDGET_CD = 'XYZ' AND r.[PROPERTY] in ('A','B') AND d.ISSUE_DATE between '2016-01-01' AND '2016-12-31' )

        IF @BaselineD = 0
            SET @Baseline = 0.00
        ELSE 
            SET @Baseline = @BaselineC/@BaselineD
        -- PRINT 'Baseline is ' + cast(@Baseline AS varchar(10))

        -- Calculate 4 quarterly scores for the unit based on date values calculated earlier


        SET @Q1TBC = (SELECT count(r.[PROPERTY]) FROM TableR r
        JOIN TableD d ON r.ITEM_NBR = d.UNIQUE_ID
        JOIN TableA a on r.ITEM_NBR = a.ITEM_NBR
        WHERE a.UNIT_NBR = @Unit AND r.WIDGET_CD = 'XYZ' AND r.[PROPERTY] in ('A','B') AND d.ISSUE_DATE between @Q1Start AND DATEADD(day,-1,@Q2Start))

        SET @Q1TBD = (SELECT count(r.[PROPERTY]) FROM TableR r
        JOIN TableD d ON r.ITEM_NBR = d.UNIQUE_ID
        JOIN TableA a on r.ITEM_NBR = a.ITEM_NBR
        WHERE a.UNIT_NBR = @Unit AND r.WIDGET_CD = 'XYZ' AND d.ISSUE_DATE between @Q1Start AND DATEADD(day,-1,@Q2Start))
        -- PRINT 'Q1 n - ' + cast(@Q1TBD AS varchar(10))

        IF @Q1TBD = 0
            SET @Q1TBS = 0.000
        ELSE 
            SELECT @Q1TBS = @Q1TBC/@Q1TBD

        SET @Q2TBC = (SELECT count(r.[PROPERTY]) FROM TableR r
        JOIN TableD d ON r.ITEM_NBR = d.UNIQUE_ID
        JOIN TableA a on r.ITEM_NBR = a.ITEM_NBR
        WHERE a.UNIT_NBR = @Unit AND r.WIDGET_CD = 'XYZ' AND r.[PROPERTY] in ('A','B') AND d.ISSUE_DATE between @Q2Start AND DATEADD(day,-1,@Q3Start)) 

        SET @Q2TBD = (SELECT count(r.[PROPERTY]) FROM TableR r
        JOIN TableD d ON r.ITEM_NBR = d.UNIQUE_ID
        JOIN TableA a on r.ITEM_NBR = a.ITEM_NBR
        WHERE a.UNIT_NBR = @Unit AND r.WIDGET_CD = 'XYZ' AND d.ISSUE_DATE between @Q2Start AND DATEADD(day,-1,@Q3Start))
        -- PRINT 'Q2 n - ' + cast(@Q2TBD AS varchar(10))
        IF @Q2TBD = 0
            SET @Q2TBS = 0.000
        ELSE 
            SELECT @Q2TBS = @Q2TBC/@Q2TBD

        SET @Q3TBC = (SELECT count(r.[PROPERTY]) FROM TableR r
        JOIN TableD d ON r.ITEM_NBR = d.UNIQUE_ID
        JOIN TableA a on r.ITEM_NBR = a.ITEM_NBR
        WHERE a.UNIT_NBR = @Unit AND r.WIDGET_CD = 'XYZ' AND r.[PROPERTY] in ('A','B') AND d.ISSUE_DATE between @Q3Start AND DATEADD(day,-1,@Q4Start))

        SET @Q3TBD = (SELECT count(r.[PROPERTY]) FROM TableR r
        JOIN TableD d ON r.ITEM_NBR = d.UNIQUE_ID
        JOIN TableA a on r.ITEM_NBR = a.ITEM_NBR
        WHERE a.UNIT_NBR = @Unit AND r.WIDGET_CD = 'XYZ' AND d.ISSUE_DATE between @Q3Start AND DATEADD(day,-1,@Q4Start))
        -- PRINT 'Q3 n - ' + cast(@Q3TBD AS varchar(10))

        IF @Q3TBD = 0
            SET @Q3TBS = 0.000
        ELSE 
            SELECT @Q3TBS = @Q3TBC/@Q3TBD 

        SET @Q4TBC = (SELECT count(r.[PROPERTY]) FROM TableR r
        JOIN TableD d ON r.ITEM_NBR = d.UNIQUE_ID
        JOIN TableA a on r.ITEM_NBR = a.ITEM_NBR
        WHERE a.UNIT_NBR = @Unit AND r.WIDGET_CD = 'XYZ' AND r.[PROPERTY] in ('A','B') AND (d.ISSUE_DATE between @Q4Start AND CURRENT_TIMESTAMP))

        SET @Q4TBD = (SELECT count(r.[PROPERTY]) FROM TableR r
        JOIN TableD d ON r.ITEM_NBR = d.UNIQUE_ID
        JOIN TableA a on r.ITEM_NBR = a.ITEM_NBR
        WHERE a.UNIT_NBR = @Unit AND r.WIDGET_CD = 'XYZ' AND d.ISSUE_DATE between @Q4Start AND CURRENT_TIMESTAMP)
        -- PRINT 'Q4 n - ' + cast(@Q4TBD AS varchar(10))

        IF @Q4TBD = 0
            SET @Q4TBS = 0.000
        ELSE
            SELECT @Q4TBS = @Q4TBC/@Q4TBD

        -- PRINT 'Q1 score - ' + cast(@Q1TBS AS varchar(10))
        -- PRINT 'Q2 score - ' + cast(@Q2TBS AS varchar(10))
        -- PRINT 'Q3 score - ' + cast(@Q3TBS AS varchar(10))
        -- PRINT 'Q4 score - ' + cast(@Q4TBS AS varchar(10))

        -- Calculate StarScore

    -- Q1 star score

        IF @Q1TBS < @Goal -- If Q1 < Goal, next compare to baseline
            BEGIN
                IF @Q1TBS < @Baseline -- if less than baseline no score
                    BEGIN           
                    SELECT @StarScore = @StarScore + 0
                    END
                ELSE -- it is higher than baseline, still no score in Q1
                    SELECT @StarScore = @StarScore + 0

            END

        ELSE 
            SELECT @StarScore = @StarScore + .25


        -- Q2 Star Score 

        IF @Q2TBS < @Goal -- If Q2 < Goal, next compare to Q1
            BEGIN
                IF @Q2TBS < @Q1TBS -- if less than Q1 no score
                    SELECT @StarScore = @StarScore + 0
                ELSE -- it is higher than Q1, add .25
                    SELECT @StarScore = @StarScore + .25
            END
        ELSE 
            SELECT @StarScore = @StarScore + .25

        -- Q3 Star Score  

        IF @Q3TBS < @Goal -- If Q3 < Goal, next compare to Q2
            BEGIN
                IF @Q3TBS < @Q2TBS -- if less than Q2 no score
                    SELECT @StarScore = @StarScore + 0
                ELSE -- it is higher than Q2, add .25
                    SELECT @StarScore = @StarScore + .25
            END
        ELSE 
            SELECT @StarScore = @StarScore + .25        

            --Q4 Star Score 

        IF @Q4TBS < @Goal -- If Q4 < Goal, next compare to Q3
            BEGIN
                IF @Q4TBS < @Q3TBS -- if less than Q3 no score
                    SELECT @StarScore = @StarScore + 0
                ELSE -- it is higher than Q4, add .25
                    SELECT @StarScore = @StarScore + .25
            END
        ELSE 
            SELECT @StarScore = @StarScore + .25    

    -- PRINT 'Score is ' + cast(@StarScore AS varchar(10))

            INSERT INTO #Scores VALUES(@Unit, @UnitName,@StarScore)
            delete #Units WHERE UnitKey = 1
            set rowcount 1
            update #Units set UnitKey = 1
            SET @StarScore = 0.00
        end

set rowcount 0

select * from #Scores