[英]SQL Union with counts
我认为执行时返回引用代码的次数。 我的看法是:
Create view [myview] as
SELECT S.id AS code_id,
u.asset_standard_id,
Count(U.pkey) AS COUNT
FROM imtbl_code S LEFT OUTER JOIN
imvw_woap_code_with_cust U ON U.code_id = S.Id and s.code_type = (select pkey from imtbl_code_type where imtbl_code_type.id = 'A-Problem')
GROUP BY S.id,
u.asset_standard_id
order by count
因此,如果我的表格设置如下:
imvw_woap_code_with_cust || imtbl_code
---------------------------------
Code_id | asset_standard_id || Code_id
----------------------------------------------
c1 25209-45MEO || c1
c3 25209-45MEO || c2
c3 25209-45MEO || c3
当我运行时, select * from myview where asset_standard_id = '25209-45MEO'
该视图返回
code_id || asset_standard_id || count
c3 25209-45MEO 2
c1 25209-45MEO 1
我想看到的是计数为零时返回的值。
code_id || asset_standard_id || count
c3 25209-45MEO 2
c1 25209-45MEO 1
c2 25209-45MEO 0
我之前曾问过类似的问题,但并不清楚,只是想澄清一点。
我想从答案中添加以下代码:
SELECT
possibilities.ID AS code_id,
possibilities.asset_standard_id,
Count(U.pkey) AS [COUNT]
FROM (
SELECT
a.asset_standard_id,b.ID
FROM (SELECT DISTINCT asset_standard_id FROM imvw_woap_code_with_cust) AS a
CROSS JOIN (
SELECT DISTINCT ID FROM imtbl_code
UNION
SELECT DISTINCT CODE_ID AS [ID] FROM imvw_woap_code_with_cust
) AS b
) AS possibilities
LEFT OUTER JOIN imvw_woap_code_with_cust AS U ON U.code_id = possibilities.Id
and u.code_type = (
select pkey
from imtbl_code_type
where imtbl_code_type.id = 'A-Problem'
)
where u.code_type_id = 'A-Problem'
GROUP BY possibilities.id, possibilities.asset_standard_id
被关闭,但计数远未完成。
来自表的样本数据imvw_woap_code_with_cust
pkey code_id code_type_id, asset_standard_id
101480 Alarmining A-Problem 1 East
103350 Fluid/Gas Leak (Out) A-Problem 2 west
104033 plug/Pwr Cord Damg A-Problem 2 west
107296 Alarmining A-Problem 2 west
106404 Incoming Inspect A-Problem 2 west
106407 Incoming Inspect A-Problem 2 west
IMTBL_CODE
pkey, code_id, code_type_id
100064 1-NO PROBLEM CODE ENTERED A-Problem
100068 Alarmining A-Problem
100069 Battery Failure A-Problem
100070 Incoming Inspect A-Problem
100071 Fluid/Gas Leak (Out) A-Problem
100072 Case Damaged A-Problem
100073 plug/Pwr Cord Damg A-Problem
您需要获取所有可能的组合。 CROSS JOIN可以解决这个问题,但请注意:在大型数据集上,这很痛苦。
DECLARE @imvw_woap_code_with_cust TABLE (
pkey INT,
Code_id VARCHAR(200),
code_type_id VARCHAR(200),
asset_standard_id VARCHAR(200)
)
INSERT INTO @imvw_woap_code_with_cust(pkey,Code_id,code_type_id,asset_standard_id)
SELECT 101480,'Alarmining','A-Problem','1 East'
UNION SELECT 103350,'Fluid/Gas Leak (Out)','A-Problem','2 west'
UNION SELECT 104033,'plug/Pwr Cord Damg','A-Problem','2 west'
UNION SELECT 107296,'Alarmining','A-Problem','2 west'
UNION SELECT 106404,'Incoming Inspect','A-Problem','2 west'
UNION SELECT 106407,'Incoming Inspect','A-Problem','2 west'
DECLARE @IMTBL_CODE TABLE (
pkey INT,
Code_id VARCHAR(200),
code_type_id VARCHAR(200)
)
INSERT INTO @IMTBL_CODE(pkey,Code_id,code_type_id)
SELECT 100064,'1-NO PROBLEM CODE ENTERED','A-Problem'
UNION SELECT 100068,'Alarmining','A-Problem'
UNION SELECT 100069,'Battery Failure','A-Problem'
UNION SELECT 100070,'Incoming Inspect','A-Problem'
UNION SELECT 100071,'Fluid/Gas Leak (Out)','A-Problem'
UNION SELECT 100072,'Case Damaged','A-Problem'
UNION SELECT 100073,'plug/Pwr Cord Damg','A-Problem'
SELECT
possibilities.code_id AS code_id,
possibilities.asset_standard_id,
Count(U.pkey) AS [COUNT]
FROM (
SELECT
a.asset_standard_id,b.code_id
FROM (SELECT DISTINCT asset_standard_id FROM @imvw_woap_code_with_cust) AS a
CROSS JOIN (
SELECT DISTINCT code_id FROM @imtbl_code
UNION
SELECT DISTINCT CODE_ID AS [ID] FROM @imvw_woap_code_with_cust
) AS b
) AS possibilities
LEFT OUTER JOIN @imvw_woap_code_with_cust AS U ON U.code_id = possibilities.code_id
AND possibilities.asset_standard_id=u.asset_standard_id
and u.code_type_id='A-Problem'
GROUP BY possibilities.code_id, possibilities.asset_standard_id
order by [count]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.