gpt4 book ai didi

join - 出现重复值时在sql server 2014中创建动态列

转载 作者:行者123 更新时间:2023-12-02 04:47:51 25 4
gpt4 key购买 nike

我正在运行以下 sql:

SELECT DISTINCT 
Anvendelseskoder.[Usage Code] AS [Byggeanvendelseskode],
Anvendelseskoder.[Usage Code Value] AS [Byggeanvendelse],
HeleDanmark_DAWA.KVHx
FROM Anvendelseskoder
RIGHT JOIN HeleDanmark_DAWA
ON Anvendelseskoder.KVHx = HeleDanmark_DAWA.KVHx
WHERE HeleDanmark_DAWA.postnr=6720 AND Anvendelseskoder.[Usage Code]>0

这给了我以下输出:(新用户,不能发布图片,抱歉!)

enter image description here

我想要更像这样的东西:

enter image description here

我一直在检查关于 Using PIVOT and JOIN together 的问题,但我无法让它工作。任何人都可以帮我解决这个问题吗?

更新:我试图使代码工作,但不能让它做我想做的事: enter image description here

WITH Acode 
AS (SELECT
HeleDanmark_DAWA.KVHx,
Anvendelseskoder.[Usage Code],
Anvendelseskoder.[Usage Code Value]
FROM Anvendelseskoder
RIGHT JOIN HeleDanmark_DAWA
ON HeleDanmark_DAWA.KVHx = Anvendelseskoder.KVHx)
SELECT *
FROM Acode PIVOT( COUNT([Usage Code]) FOR [Usage Code Value] IN (
[Stuehus til landbrugsejendom],
[Fritliggende enfamilieshus (parcelhus).],
[Række-, kæde- eller dobbelthus (lodret adskillelse mellem enhederne).],
[Etageboligbebyggelse (flerfamiliehus, herunder tofamiliehus (vandret adskillelse mellem enhederne)).],
[Kollegium],
[Døgninstitution (plejehjem, alderdomshjem, børne- eller ungdomshjem).],
[Anden enhed til helårsbeboelse],
[Erhvervsmæssig produktion vedrørende landbrug, skovbrug, gartneri, råstofudvinding og lign.],
[Erhvervsmæssig produktion vedrørende industri, håndværk m.v. (fabrik, værksted o. lign.)],
[El-, gas-, vand- eller varmeværk, forbrændingsanstalt o. lign.],
[Anden enhed til produktion og lager i forbindelse med landbrug, industri o. lign.],
[Transport- og garageanlæg (fragtmandshal, lufthavnsbygning,banegårdsbygning o. lign.)],
[Engroshandel og lager.],
[Detailhandel m.v.],
[Pengeinstitut, forsikringsvirksomhed m.v.],
[Kontor og liberale erhverv bortset fra offentlig administration],
[Offentlig administration.],
[Hotel, restauration, vaskeri, frisør og anden servicevirksomhed.],
[Anden enhed til handel, transport etc.],
[Biograf, teater, erhvervsmæssig udstilling m.v.],
[Bibliotek, museum, kirke o. lign.],
[Undervisning og forskning (skole, gymnasium, forskningslaboratorium).],
[Hospital, fødeklinik o. lign.],
[Daginstitution.],
[Anden institution, herunder kaserne, fængsel m.v.],
[Sommerhus.],
[Enhed til ferieformål m.v. bortset fra sommerhus (feriekoloni vandrehjem o. lign.)],
[Enhed i forbindelse med idrætsudøvelse (klubhus, idrætshal, svømmehal o. lign.).],
[Kolonihavehus.],
[Anden enhed til fritidsformål.],
[Ikke tidligere vurderet erhvervsenhed i nybyggeri],
[Garage],
[Carport],
[Udhus]) ) AS pvt

7 月更新代码(我无法开始工作):

WITH a AS (
SELECT DISTINCT
Anvendelseskoder.[Usage Code] AS [Byggeanvendelseskode],
Anvendelseskoder.[Usage Code Value] AS [Byggeanvendelse],
HeleDanmark_DAWA.KVHx
FROM Anvendelseskoder
RIGHT JOIN HeleDanmark_DAWA
ON Anvendelseskoder.KVHx = HeleDanmark_DAWA.KVHx
WHERE HeleDanmark_DAWA.postnr=6720 AND Anvendelseskoder.[Usage Code]>0),

aa AS (SELECT a.*, row_number() over(partition by KVHx order by Byggeanvendelseskode) Nr
FROM a)

SELECT KVHx, Byggeanvendelseskode AS Kode1, Byggeanvendelse AS Anvend1,
(SELECT Byggeanvendelseskode FROM aa AS s2
WHERE s2.Nr = 2 AND s2.KVHx = aa.KVHx) AS Kode2,
(SELECT Byggeanvendelse FROM aa AS s2
WHERE s2.Nr = 2
AND s2.KVHx = aa.KVHx) AS Anvend2,
(SELECT Byggeanvendelseskode FROM aa AS s2
WHERE s2.Nr = 3 AND s2.KVHx = aa.KVHx) AS Kode3,
(SELECT Byggeanvendelse FROM aa AS s2
WHERE s2.Nr = 3 AND s2.KVHx = aa.KVHx) AS Anvend3
FROM aa AS s1
WHERE Nr = 1

最佳答案

看起来您实际上与上次尝试非常接近,只需从查询末尾的 from 子句中删除别名 as s1 ,您应该会得到您想要的结果 - 或者至少一个与您显示的图像匹配的结果作为期望的结果(除了一个小的变化,但结果似乎与源数据不匹配)。

但是,您的查询使用了几个相关的子查询,这些子查询可能效率不高,可以用 case 表达式代替,因此您的查询可以简化为(给出相同的输出):

WITH cte AS (
SELECT DISTINCT
Anvendelseskoder.[Usage Code] AS [Byggeanvendelseskode],
Anvendelseskoder.[Usage Code Value] AS [Byggeanvendelse],
HeleDanmark_DAWA.KVHx,
Nr = ROW_NUMBER() OVER(PARTITION BY HeleDanmark_DAWA.KVHx
ORDER BY Anvendelseskoder.[Usage Code])
FROM Anvendelseskoder
RIGHT JOIN HeleDanmark_DAWA
ON Anvendelseskoder.KVHx = HeleDanmark_DAWA.KVHx
WHERE HeleDanmark_DAWA.postnr=6720 AND Anvendelseskoder.[Usage Code]>0
)

SELECT KVHx,
MAX(CASE WHEN Nr = 1 THEN Byggeanvendelseskode END) AS Kode1,
MAX(CASE WHEN Nr = 1 THEN Byggeanvendelse END) AS Anvend1,
MAX(CASE WHEN Nr = 2 THEN Byggeanvendelseskode END) AS Kode2,
MAX(CASE WHEN Nr = 2 THEN Byggeanvendelse END) AS Anvend2,
MAX(CASE WHEN Nr = 3 THEN Byggeanvendelseskode END) AS Kode3,
MAX(CASE WHEN Nr = 3 THEN Byggeanvendelse END) AS Anvend3
FROM cte
GROUP BY KVHx;

如果您有不同数量的列,您可能需要考虑使查询动态化。有几个很好的答案可以向您展示如何,例如:Efficiently convert rows to columns in sql server

关于join - 出现重复值时在sql server 2014中创建动态列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31453338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com