-1

ドキュメントをいつまでに完了する必要があるかを示す「DaysUntilDue」列があります。「記録された日」列を使用して「期日」に基づいて「期日」を計算し、土曜日と日曜日の両方を除外する必要があります。

私が持っているのは、作業する必要があることがわかっている列だけです。土曜日と日曜日を除外した Case When ステートメントのコードがありますが、それを必要な作業に組み込む方法がわかりません。必要なすべての列があり、すべてが必要な方法でリンクされています。ドキュメントの「logTime」が既存の「DaysUntilDue」を使用して期日を計算するが、週末を除外するというステートメントを作成する方法に本当に苦労しています

SELECT     
CategoryName, 
DocCategory,
DaysUntilDue, 
TranNbr, 
DueDate, 
LogTime
FROM Queue INNER JOIN WQMTransactions ON Queue.TranNbr = WQMTransactions.TranNbr INNER  JOIN 
 ServiceQ INNER JOIN CategoryList ON ServiceQn.TranID =      CategoryList.TranID 
 INNER JOIN Category ON CategoryList.CategoryID =     Category.CategoryID 
 ON Queue.CategoryID = Category.CategoryID AND Queue.TranID = ServiceQ.TranID

寝不足のせいかもしれませんが、概念的にどうしたらいいのかわかりません。

同様のことを行う別の qry 用に作成したこの Case ステートメントを使用する必要があると想定しています。

CASE WHEN Doc IN ( 'POS', 'Card' )
     THEN CAST(DATEADD(d, CASE DATEPART(dw, DateEntered)
                            WHEN 7 THEN 2
                            WHEN 1 THEN 1
                            ELSE 0
                          END, DateEntered) + ( DATEPART(dw,
                                                      DATEADD(d,
                                                      CASE DATEPART(dw,
                                                      DateEntered)
                                                      WHEN 7 THEN 2
                                                      WHEN 1 THEN 1
                                                      ELSE 0
                                                      END, DateEntered))
                                                - 2 + 5 ) % 5
          + ( ( DATEPART(dw, DATEADD(d, CASE DATEPART(dw, DateEntered)
                                          WHEN 7 THEN 2
                                          WHEN 1 THEN 1
                                          ELSE 0
                                        END, DateEntered)) - 2 + 5 )
              / 5 ) * 7 - ( DATEPART(dw,
                                     DATEADD(d,
                                             CASE DATEPART(dw,
                                                      DateEntered)
                                               WHEN 7 THEN 2
                                               WHEN 1 THEN 1
                                               ELSE 0
                                             END, DateEntered)) - 2 ) AS DATE)
     ELSE CAST(DATEADD(d, CASE DATEPART(dw, DateEntered)
                            WHEN 7 THEN 2
                            WHEN 1 THEN 1
                            ELSE 0
                          END, DateEntered) + ( DATEPART(dw,
                                                      DATEADD(d,
                                                      CASE DATEPART(dw,
                                                      DateEntered)
                                                      WHEN 7 THEN 2
                                                      WHEN 1 THEN 1
                                                      ELSE 0
                                                      END, DateEntered))
                                                - 2 + 10 ) % 5
          + ( ( DATEPART(dw, DATEADD(d, CASE DATEPART(dw, DateEntered)
                                          WHEN 7 THEN 2
                                          WHEN 1 THEN 1
                                          ELSE 0
                                        END, DateEntered)) - 2 + 10 )
              / 5 ) * 7 - ( DATEPART(dw,
                                     DATEADD(d,
                                             CASE DATEPART(dw,
                                                      DateEntered)
                                               WHEN 7 THEN 2
                                               WHEN 1 THEN 1
                                               ELSE 0
                                             END, DateEntered)) - 2 ) AS DATE)
END AS 'Required SLA Date' 
4

1 に答える 1

2

あなたの質問を修正しようとしました。また、DueDate を計算します。DaysUntilDue = 0 の場合、DueDate は null です。

SELECT     
CategoryName, 
DocCategory,
DaysUntilDue, 
TranNbr, 
LogTime,
dateadd(day, a.n, LoggedDay) DueDate
FROM Queue 
INNER JOIN WQMTransactions ON Queue.TranNbr = WQMTransactions.TranNbr 
INNER JOIN ServiceQ ON Queue.CategoryID = Category.CategoryID AND Queue.TranID = ServiceQ.TranID
INNER JOIN CategoryList ON ServiceQn.TranID = CategoryList.TranID 
INNER JOIN Category ON CategoryList.CategoryID = Category.CategoryID 
cross apply
(
select coalesce(max(number)+1, 0) n
from(
select top (DaysUntilDue) number from 
master..spt_values
WHERE TYPE = 'P'
and datediff(day, -number-1, LoggedDay) % 7 not in (5,6)
order by number
) 
a) 
a
于 2013-08-08T14:55:01.990 に答える