Мое решение очистит ненулевые нулевые значения
DECLARE @cols AS NVARCHAR(MAX),
@maxcols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(CodigoFormaPago)
from PO_FormasPago
order by CodigoFormaPago
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
select @maxcols = STUFF((SELECT ',MAX(' + QUOTENAME(CodigoFormaPago) + ') as ' + QUOTENAME(CodigoFormaPago)
from PO_FormasPago
order by CodigoFormaPago
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT CodigoProducto, DenominacionProducto, ' + @maxcols + '
FROM
(
SELECT
CodigoProducto, DenominacionProducto,
' + @cols + ' from
(
SELECT
p.CodigoProducto as CodigoProducto,
p.DenominacionProducto as DenominacionProducto,
fpp.CantidadCuotas as CantidadCuotas,
fpp.IdFormaPago as IdFormaPago,
fp.CodigoFormaPago as CodigoFormaPago
FROM
PR_Producto p
LEFT JOIN PR_FormasPagoProducto fpp
ON fpp.IdProducto = p.IdProducto
LEFT JOIN PO_FormasPago fp
ON fpp.IdFormaPago = fp.IdFormaPago
) xp
pivot
(
MAX(CantidadCuotas)
for CodigoFormaPago in (' + @cols + ')
) p
) xx
GROUP BY CodigoProducto, DenominacionProducto'
t @query;
execute(@query);
Зависит от типа данных вашей городской переменной. Если переменная города имеет тип BsonValue, вы можете использовать оператор напрямую:
BsonValue city = null;
var query = Query.EQ("city", city ?? BsonNull.Value);
Console.WriteLine(query.ToJson());
Если ваша переменная города имеет строку типа, вам нужно сделать дополнительный конверсионный перевод, чтобы сделать компилятор счастливым:
string city = null;
var query = Query.EQ("city", (BsonValue)city ?? BsonNull.Value);
Console.WriteLine(query.ToJson());
Предполагаю, что вы работаете с BsonDocuments, а не с классами C #. Из-за этого для нулевых значений вам нужно использовать BsonNull.Value для представления нулевых значений в базе данных и в запросах.