Это устаревший запрос, который я очищаю, и я смущаюсь с этим аргументом case, поэтому любая помощь будет принята с благодарностью.T-SQL Case Statement confusion
SELECT CASE
WHEN bitdelivered = 1 THEN
'' + CONVERT(CHAR(10), deliv.dtmdeliverydate, 101)
+ ' '
+ 'þ' + '
' -- this is a carriage return, do not remove it
WHEN bitdelivered = 0 AND deliv.dtmdeliverydate < Getdate() THEN
'' + CONVERT(CHAR(10), deliv.dtmdeliverydate, 101)
+ ' '
+ '¨' + '
'
ELSE
'' + CONVERT(CHAR(10), deliv.dtmdeliverydate, 101)
+ ' '
+ '¨' + '
'
END
Как я сказал, что это очень грязная, но когда я запускаю весь запрос, если я получаю 0 для bitdelivered, то casestatement работает как следует, однако, если я получаю 1 вернулся, то я возвращаю null вместо блока else. Есть идеи?
EDIT Я редактировал код, как показано ниже, для облегчения читаемости и я все еще получаю пустой ...
select
CONVERT(CHAR(10), deliv.dtmdeliverydate, 101) +
' ' +
CASE
WHEN bitdelivered = 1 THEN 'þ'
ELSE '¨'
END + '
'
EDIT х 2 Здесь все (очень противным я знаю) SQL-запрос Я не пишу это, я просто пытаюсь очистить его ...
SELECT dbo.tblrequirements.guidrequirementid,
tblcontracting.strdescription AS
strcontracting,
dbo.viewawardnumbers.strcontractnumber AS
strawardnumber,
Ltrim(Rtrim(dbo.viewawardnumbers.strtonumber)) AS strtonumber,
dbo.tblrequirements.strdescription,
dbo.tblezquerycontractvalue.curtotalvalue,
dbo.tblcodescontractvehicles.strdescription AS
strcontractvehicle,
tblcustomer.stracronym AS strcustomer,
dbo.tblcodesrequirementstatuses.strdescription AS strstatus,
Substring(dbo.tblrequirements.strnotes, 0, 512) AS strnotes,
Coalesce (dbo.tblrequirements.guidfromid,
'00000000-0000-0000-0000-000000000000'
) AS guidfromid,
Coalesce (dbo.viewteammembers.guidpersonid,
'00000000-0000-0000-0000-000000000000') AS guidpersonid
,
dbo.viewcurrentoptions.dtmstart,
dbo.viewcurrentoptions.dtmend,
Dateadd(d, -60, dbo.viewcurrentoptions.dtmend) AS
dtm1stnoticedue,
Dateadd(d, -30, dbo.viewcurrentoptions.dtmend) AS
dtm2ndnoticedue,
dbo.tblcontractdates.dtmcontractstart,
dbo.tblcontractdates.dtmcontractend,
Isnull(dbo.viewteammembers.strshortname, ' Not Assigned') AS strshortname
,
dbo.tblezqueryfunding.curtotalfunded,
CASE
WHEN (dbo.tblcodesrequirementstatuses.strdescription =
'Pre-Solicitation'
OR dbo.tblcodesrequirementstatuses.strdescription =
'Solicitation'
OR dbo.tblcodesrequirementstatuses.strdescription =
'Source Selection'
) THEN 'P'
WHEN (Coalesce (dbo.tblcodesprocurementtypes.strcode, '') <> 'IT'
AND Coalesce (dbo.tblcodesprocurementtypes.strcode, '') <> 'OPS'
) THEN
'S'
ELSE 'C'
END AS strproctype,
dbo.tblcodesprocurementtypes.strcode,
dbo.tblcodesprocurementtypes.strdescription AS strprocdesc,
deliveries.dtmdeliverydate,
deliveries.bitdelivered,
CASE
WHEN (dbo.tblcodesrequirementstatuses.strdescription =
'Pre-Solicitation'
OR dbo.tblcodesrequirementstatuses.strdescription =
'Solicitation'
OR dbo.tblcodesrequirementstatuses.strdescription =
'Source Selection'
) THEN 'Initial Start Date'
WHEN (Coalesce (dbo.tblcodesprocurementtypes.strcode, '') <> 'IT'
AND Coalesce (dbo.tblcodesprocurementtypes.strcode, '') <> 'OPS'
) THEN
'POP'
ELSE 'Delivery Date'
END AS
colpopdelivdt,
CASE
WHEN (dbo.tblcodesrequirementstatuses.strdescription =
'Pre-Solicitation'
OR dbo.tblcodesrequirementstatuses.strdescription =
'Solicitation'
OR dbo.tblcodesrequirementstatuses.strdescription =
'Source Selection'
) THEN 'Req Award Date'
WHEN (Coalesce (dbo.tblcodesprocurementtypes.strcode, '') <> 'IT'
AND Coalesce (dbo.tblcodesprocurementtypes.strcode, '') <> 'OPS'
) THEN
'Option Notice'
ELSE 'Delivered'
END AS
coloptnotdeliv,
tblpresolicitations.dtmcontacted,
tblpresolicitations.dtmrequiredby,
tblpresolicitations.dtmawardnotice,
strjobid,
bitprimary
FROM dbo.tblrequirements
INNER JOIN dbo.tblcodesrequirementstatuses
ON dbo.tblcodesrequirementstatuses.strcode =
dbo.tblrequirements.strstatusid
LEFT OUTER JOIN dbo.tblezquerycontractvalue
ON dbo.tblezquerycontractvalue.guidrequirementid =
dbo.tblrequirements.guidrequirementid
LEFT OUTER JOIN dbo.viewawardnumbers
ON dbo.viewawardnumbers.guidrequirementid =
dbo.tblrequirements.guidrequirementid
LEFT OUTER JOIN dbo.tblezqueryfunding
ON dbo.tblezqueryfunding.strawardnumber =
dbo.viewawardnumbers.strawardnumber
LEFT OUTER JOIN dbo.viewcurrentoptions
ON dbo.tblrequirements.guidrequirementid =
dbo.viewcurrentoptions.guidrequirementid
LEFT OUTER JOIN dbo.viewteammembers
ON dbo.viewteammembers.guidrequirementid =
dbo.tblrequirements.guidrequirementid
LEFT OUTER JOIN dbo.tblcontracts
ON dbo.tblcontracts.guidrequirementid =
dbo.tblrequirements.guidrequirementid
LEFT OUTER JOIN dbo.tblcontractdates
ON dbo.tblcontractdates.guidrequirementid =
dbo.tblrequirements.guidrequirementid
LEFT OUTER JOIN dbo.tblcodescontractvehicles
ON dbo.tblcodescontractvehicles.strcode = dbo.tblcontracts.strvehicleid
LEFT OUTER JOIN dbo.tblorganizations AS tblcontracting
ON dbo.tblrequirements.guidfromid = tblcontracting.guidorgid
LEFT OUTER JOIN dbo.tblorganizations AS tblcustomer
ON dbo.tblrequirements.guidtoid = tblcustomer.guidorgid
LEFT OUTER JOIN dbo.tblpresolicitations
ON dbo.tblpresolicitations.guidrequirementid =
dbo.tblrequirements.guidrequirementid
LEFT OUTER JOIN dbo.tblcodesprocurementtypes
ON dbo.tblcodesprocurementtypes.strcode =
dbo.tblpresolicitations.strprocurementtypeid
LEFT OUTER JOIN (SELECT guidrequirementid,
REPLACE(REPLACE(REPLACE (
(select
ISNULL(CONVERT(CHAR(10), deliv.dtmdeliverydate, 101), '(no date)') +
' ' +
CASE
WHEN bitdelivered = 1 THEN 'þ'
ELSE '¨'
END + '
'
/*(SELECT CASE
WHEN bitdelivered = 1
THEN
''
+
CONVERT(CHAR(10),
deliv.dtmdeliverydate,
101) +
' '
+ 'þ' + '
'
WHEN bitdelivered = 0
AND deliv.dtmdeliverydate < Getdate() THEN
'' +
CONVERT(CHAR(10), deliv.dtmdeliverydate, 101) +
' '
+ '¨' + '
'
ELSE
'' + CONVERT(CHAR(10), deliv.dtmdeliverydate, 101) +
' '
+ '¨' + '
'
END*/
FROM tblclins clins
INNER JOIN tblcommodities commod
ON commod.guidclinid = clins.guidclinid
INNER JOIN tbldeliveries deliv
ON deliv.guidcommodityid = commod.guidcommodityid
WHERE clins.guidrequirementid = req.guidrequirementid
AND deliv.bitdelivered = 0
ORDER BY guidrequirementid,
deliv.dtmdeliverydate
FOR XML PATH('')), '<', '<'), '>', '>'), '&', '&') AS dtmdeliverydate
,
Stuff ((SELECT '|' + CAST(bitdelivered AS CHAR(1))
FROM tblclins clins
INNER JOIN tblcommodities commod
ON commod.guidclinid = clins.guidclinid
INNER JOIN tbldeliveries deliv
ON deliv.guidcommodityid = commod.guidcommodityid
WHERE clins.guidrequirementid = req.guidrequirementid
ORDER BY guidrequirementid
FOR XML PATH('')), 1, 1, '') AS bitdelivered
FROM tblrequirements req
GROUP BY guidrequirementid) deliveries
ON deliveries.guidrequirementid = dbo.tblrequirements.guidrequirementid
Бог благословит вас, что некрасиво =/ – Yuck
Возможно ли, что 'deliv.dtmdeliverydate' является NULL? Я бы надеялся, что с тех пор, как ваш бит-бит будет равен 1 в этом случае. –
@PhilKlein no is not null – EvanGWatkins