varchar2列に挿入してNULLになるvarchar2列に挿入できるスペースまたは他の非印刷文字はありますか?SSRS 2008での表示のためにOracle 11gのvarchar2に残る空白文字
SSRS 2008レポートに何も表示しないように、空白を列に挿入するだけです。カラムはPKの一部であるため、NULLにすることはできません。もちろん''
を使用すると、OracleではNULLと見なされ、' '
はvarchar2であり、NULLになるように調整されているため機能しません。
代わりにSSRSには何も表示されませんが、Oracle 11gのnullableでないvarchar2カラムにも挿入できるリテラル値が挿入できますか?
すぐに考えてみると、タブ文字のようなものが仕事をすることができると思います。しかし、私はあなたの提案を楽しみにしています。
UPDATE
おっと。トリミングの振る舞いはどこから来たのでしょうか?私自身のRTRIM!申し訳ありません。ただ、私がOracleの経験の浅さから誤解を招いていると言いましょう。私の不満は、私の質問ではなく製品にあると判断するための私の不満です。しかし、ちょっと、ちょっと単純なクエリではありません。下記の私のテストで
INSERT INTO WeeklyInvoice (GUID, Mo, VendorName, CostCenter, WkNum, Amt)
SELECT
ExecID,
Mo,
VendorName,
CostCenter,
WkNum,
Amt
FROM (
WITH CostCenters AS (
SELECT REGEXP_SUBSTR(CostCenterList, '[^,]+', 1, LEVEL) CostCenter
FROM DUAL
CONNECT BY LEVEL <= Length(CostCenterList) - Length(Replace(CostCenterList, ',', '')) + 1
), Invoices AS (
SELECT
TRUNC(I.Invoice_Dte, 'MM') Mo,
(TRUNC(I.Invoice_Dte, 'W') - TRUNC(I.Invoice_Dte, 'MM'))/7 + 1 WkNum,
I.Vendor,
V.Vendor_VName,
RTrim(D.Dis_Acct_Unit) CostCenter,
D.To_Base_Amt
FROM
CostCenters CC
CROSS JOIN prod.IcCompany C
INNER JOIN prod.ApDistrib D
ON C.Company = D.Company
AND D.Dis_Acct_Unit = CC.CostCenter
INNER JOIN prod.ApInvoice I
ON D.Invoice = I.Invoice
AND D.Vendor = I.Vendor
AND D.Suffix = I.Suffix
AND D.Company = I.Company
INNER JOIN prod.ApVenMast V ON I.Vendor = V.Vendor
WHERE
D.Cancel_Seq = 0
AND I.Cancel_Seq = 0
AND I.Invoice_Dte >= ADD_MONTHS(FromDate, -2)
AND I.Invoice_Dte < ToDate
), Months AS (
SELECT ADD_MONTHS(FromDate, LEVEL - 1) Mo
FROM DUAL
CONNECT BY LEVEL <= MONTHS_BETWEEN(ToDate, ADD_MONTHS(FromDate, -2))
), Names AS (
SELECT DISTINCT
I.Mo,
I.Vendor,
I.Vendor_VName,
I.CostCenter
FROM Invoices I
UNION ALL
SELECT M.Mo, '0', 'No Paid Invoices', ' '
FROM Months M
WHERE
NOT EXISTS (
SELECT I.*
FROM Invoices I
WHERE I.Mo = M.Mo
)
), Weeks AS (
SELECT LEVEL WkNum FROM DUAL CONNECT BY LEVEL <= 5
)
SELECT
N.Mo,
N.Vendor_VName VendorName,
N.CostCenter,
W.WkNum,
Sum(I.To_Base_Amt) Amt
FROM
Names N
INNER JOIN Weeks W
ON W.WkNum < 5
OR EXTRACT (MONTH FROM (N.Mo + 28)) = EXTRACT (MONTH FROM N.Mo)
LEFT JOIN Invoices I
ON N.CostCenter = I.CostCenter
AND N.Vendor = I.Vendor
AND N.Mo = I.Mo
AND W.WkNum = I.WkNum
GROUP BY
N.Mo,
N.Vendor_VName,
N.CostCenter,
W.WkNum
) X;
この列はPKなのでnullにできないので、なぜ空白を挿入したいのですか?データモデルが正しくないか、レポート側で処理できるプレゼンテーションの問題です。 –
レポートは行列を使用するため(データをピボットする)、データの全期間がNULLの場合、レポートには何も表示されません。これは望ましくない。代わりに、私はすべての4週間または5週間でその期間の "支払われない請求書"を表示するためにピボットされる毎週の列の行が必要です。したがって、私はすべての請求書がない場合に使用する "シード行"を選択するUNION ALLです。そのシード行には、アカウント単位はありません。この場合、空ではなく、正しく空白になります。このテーブルは永続ストレージ用ではなく、レポートの一時テーブルに過ぎません。 – ErikE