我有下表
| 地區 | 多變的 | 奧迪 | 保時捷 |
|---|---|---|---|
| 澳大利亞 | 訂單 | 5000 | 20 |
| 澳大利亞 | 價錢 | 50000 | 100000 |
| 澳大利亞 | 顏色 | 紅色的 | 綠色 |
| 法國 | 訂單 | 99 | 100 |
| 法國 | 價錢 | 50000 | 100000 |
| 法國 | 顏色 | 白色的 | 藍色 |
基于Variable Orders < 100此汽車的所有其他條目應位于的列0。
| 地區 | 多變的 | 奧迪 | 保時捷 |
|---|---|---|---|
| 澳大利亞 | 訂單 | 5000 | 20 |
| 澳大利亞 | 價錢 | 50000 | 0 |
| 澳大利亞 | 顏色 | 紅色的 | 0 |
| 法國 | 訂單 | 99 | 100 |
| 法國 | 價錢 | 0 | 100000 |
| 法國 | 顏色 | 0 | 藍色 |
我試圖拆分表格Region并使用,where =但無法在此處獲得任何結果。我什至不知道它是如何完成的,所以如果你能在這里幫助我就太好了。
uj5u.com熱心網友回復:
您可以在此處使用聚合來有效地為每個生成布爾真/假標志。請注意,這也必須使用,try_convert因為列可能varchar是一種 EAV 模型。
with x as (
select *,
Max(case when variable='orders' and Try_Convert(int,audi)>=100 then 1 else 0 end) over(partition by region) showAudi,
Max(case when variable='orders' and Try_Convert(int,porsche)>=100 then 1 else 0 end) over(partition by region) showPorsche
from t
)
select Region, Variable,
case when variable='Orders' or ShowAudi=1 then Audi else '0' end Audi,
case when variable='Orders' or ShowPorsche=1 then Porsche else '0' end Porsche
from x
演示小提琴
uj5u.com熱心網友回復:
你可以這樣做:
SELECT
a.Region,
a.Variable,
CASE WHEN a.Variable <> 'Orders' AND EXISTS(SELECT null FROM t z WHERE a.Region = z.Region AND 'Orders' = z.Variable AND TRY_PARSE(z.Audi AS INT) < 100) THEN '0' ELSE Audi END AS Audi,
CASE WHEN a.Variable <> 'Orders' AND EXISTS(SELECT null FROM t z WHERE a.Region = z.Region AND 'Orders' = z.Variable AND TRY_PARSE(z.Porsche as INT) < 100) THEN '0' ELSE Porsche END AS Porsche
FROM
t a
您還可以形成僅那些 Orders 行的子查詢并將其加入,然后您在每一行上都有一個可比較的常量:
SELECT
a.Region,
a.Variable,
CASE WHEN a.Variable <> 'Orders' AND ords.Audi < 100 THEN '0' ELSE a.Audi END AS Audi,
CASE WHEN a.Variable <> 'Orders' AND ords.Porsche < 100 THEN '0' ELSE a.Porsche END AS Porsche
FROM
t a
INNER JOIN (SELECT * FROM t z WHERE z.Variable = 'Orders') ords ON a.Region = ords.Region
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/346769.html
標籤:sql sql-server 查询语句
上一篇:按日期列出未連接的用戶
