例如,用户可以搜索所有记录。有时他们可能会搜索日期之间。因此,如何查询Date的列字段是可选的。
这是我的查询
melt(setDT(mydata),
measure = measure_list,
value.name = measurenames,
variable.name = "measure")
# ID measure ZA BB
# 1: 1 1 1 3
# 2: 2 1 2 3
# 3: 3 1 3 3
# 4: 4 1 4 3
# 5: 5 1 5 3
# 6: 1 2 5 6
# 7: 2 2 4 6
# 8: 3 2 3 6
# 9: 4 2 2 6
#10: 5 2 1 6
此处,用户可能会搜索年份= 2015,或者他们可能无法搜索。那我该怎么办呢。
答案 0 :(得分:2)
当您没有搜索累积到年份时,请将NULL
传递给日期参数,并在WHERE
子句中添加OR
条件@Year
{{1 }}
IS NULL
如果年份未经过硬编码,请将其传递给declare @year INT=2015
select transactions.storeid as StoreID, MONTH(transactions.Time) Month,
transactionsEntry.TransactionNumber,transactionsEntry.Quantity,
items.ItemLookupCode,items.DepartmentID,items.CategoryID,items.SubDescription1,
suppliers.SupplierName,suppliers.Code
FROM [HQMatajer].[dbo].[Transaction] as transactions
RIGHT JOIN [HQMatajer].[dbo].[TransactionEntry] as transactionsEntry
ON transactions.TransactionNumber=transactionsEntry.TransactionNumber
INNER JOIN [HQMatajer].[dbo].[Item] as items
ON transactionsEntry.ItemID=items.ID
INNER JOIN [HQMatajer].[dbo].[Supplier] as suppliers
ON items.SupplierID=suppliers.ID
where
(YEAR(transactions.Time)=@year OR ISNULL(@year,'')='') and transactions.TransactionNumber='5526499'
and items.ItemLookupCode='806077P0001' and transactions.StoreID='2001'
变量并在查询中使用。
<强>更新强>
如果您想将其与逗号分隔的字符串进行比较,请将@year
声明为@year
,如
varchar(100)
至declare @year INT=2015
然后更改where条件,如:
declare @year VARCHAR(100)='2014,2015'
以上查询将检查交易年份是否存在于@year中,并相应地显示结果。
注意:根据您的需要指定varchar的大小,这样可以提高性能。