我的桌子有两列CustomerId
& Status
(A,B,C)。
客户可以在不同的行中拥有多个状态。
我需要根据以下规则获取不同状态的计数:
我需要的是一张有状态和计数的表格。
可以请别人帮忙吗?
我知道有人会先请我写我的查询,但我无法理解如何在查询中实现这个逻辑。
答案 0 :(得分:2)
您可以使用不同的变体:
String baseUrl = "http://abcd.eng.xyz.com/wiremap/index.php?action=search&page=0&port_name=&dev_type=like&output=xml&dev_name=w2-fiqa-058";
String xmlRecords = get(baseUrl).asString();
DocumentBuilderFactory factory2 = DocumentBuilderFactory.newInstance();
factory2.setNamespaceAware(true);
DocumentBuilder builder2 = factory2.newDocumentBuilder();
Document document = builder2.parse(new ByteArrayInputStream(xmlRecords.getBytes()));
String test = document.getTextContent();
System.out.println("Value " +test);
System.out.println(document);
答案 1 :(得分:0)
我喜欢使用Cross Apply进行此类查询,因为它允许在Group By子句中使用计算状态。
这是我的解决方案,包含一些示例数据。
Declare @Table Table (Customerid int, Stat varchar(1))
INSERT INTO @Table (Customerid, Stat )
VALUES
(1, 'a'),
(1 , 'b'),
(2, 'b'),
(2 , 'c'),
(3, 'a'),
(3 , 'b'),
(3, 'c')
SELECT
ca.StatusGroup
, COUNT(DISTINCT Customerid) as Total
FROM
@Table t
CROSS APPLY
(VALUES
(
CASE WHEN
EXISTS
(SELECT 1 FROM @Table x where x.Customerid = t.CustomerID and x.Stat = 'a')
AND EXISTS
(SELECT 1 FROM @Table x where x.Customerid = t.CustomerID and x.Stat = 'b')
THEN 'A'
WHEN
EXISTS
(SELECT 1 FROM @Table x where x.Customerid = t.CustomerID and x.Stat = 'b')
AND EXISTS
(SELECT 1 FROM @Table x where x.Customerid = t.CustomerID and x.Stat = 'c')
THEN 'B'
ELSE t.stat
END
)
) ca (StatusGroup)
GROUP BY ca.StatusGroup
我编辑了这个以处理只有一个状态的客户......在这种情况下,它将根据客户状态返回A,B或C