如果我有一个具有多个条件的规则并且用户选择了多个条件,那么如何编写一个linq查询,为我提供所有规则,其中该规则中的每个条件都存在于用户选择的条件中? 这是我目前在SQL中的方式: 表 询问 对于linq查询,我将拥有这些对象(更多非规范化,但如果有帮助,我可以将它们 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
要求:
表格1:
Id Key SiteId ItemId OrderNumber
1 ABCD X BTL NULL
2 BCDE X BTL ABCD
3 CDEF X DDD BSFE
表 2:
Id ItemId Name
1 BTL B Prd
2 DDD D Prd
所需结果:
Id ItemId Name AvailableKeys
1 BTL B Prd 1
2 DDD D Prd 0
可用密钥计算为表 1 中订单号为 null 的项目数
尝试的查询:
1)
SELECT ps.ItemId, COUNT(ps.ItemId) AS AvailableKeys, item.Name
FROM TABLE1 AS ps
LEFT JOIN TABLE2 as item ON item.ItemId = ps.ItemId
WHERE ps.SiteId = 'X'
GROUP BY ps.ItemId, item.Name
-- With this query, I am getting a count of the whole number of items but not the ones having order number as null (Count including even the Unavailable Items)
2)
SELECT ps.ItemId, COUNT(ps.ItemId) AS AvailableKeys, item.Name
FROM TABLE1 AS ps
LEFT JOIN TABLE2 as item ON item.ItemId = ps.ItemId
WHERE ps.OrderNumber IS NULL AND ps.SiteId = 'X'
GROUP BY ps.ItemId, item.Name
-- With this query, I am missing the items having **ZERO** available keys
任何人都可以帮助我构建查询以从数据中获取所需的结果集。
提前致谢。
您需要一个条件总和,如下所示:
SUM(CASE WHEN OrderNumber IS NULL THEN 1 ELSE 0 END) AS AvailableKeys
以及完整的查询:
SELECT item.id, ps.ItemId
, item.Name
, SUM(CASE WHEN OrderNumber IS NULL THEN 1 ELSE 0 END) AS AvailableKeys
FROM TABLE1 AS ps
LEFT JOIN TABLE2 as item ON item.ItemId = ps.ItemId
WHERE ps.SiteId = 'X'
GROUP BY item.id, ps.ItemId, item.Name;
回报:
ID | 项目 ID | 项目名 | 可用键 |
---|---|---|---|
1 | BTL | 湾区 | 1 |
2 | DDD | D 珠三角 | 0 |
顺便说一句:您也可以使用inner join
,除非您想包含表 2 中没有匹配项的情况。
尽管外部联接的顺序错误,但您已完成第一个查询。 只需在ON
子句中为您想要在第二个表上的条件添加一个匹配项:
SELECT item.ItemId, COUNT(ps.ItemId) AS AvailableKeys, item.Name
FROM TABLE2 item LEFT JOIN
TABLE1 ps
ON item.ItemId = ps.ItemId AND
ps.SiteId = 'X' AND
ps.OrderNumber IS NULL
GROUP BY item.ItemId, item.Name;
SELECT item.id, ps.ItemId, item.Name,
SUM(IIF(OrderNumber IS NULL,1,0)) AS AvailableKeys
FROM
TABLE1 AS ps
LEFT JOIN TABLE2 AS item ON item.ItemId = ps.ItemId
WHERE ps.SiteId = 'X'
GROUP BY item.id, ps.ItemId, item.Name;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.