SQL-将一列数据转到一行

发布于 2025-01-19 14:20:03 字数 1078 浏览 3 评论 0原文

我希望将单列的值拿到每个clientguid的相应行中。 语句的一个简单示例是:

62.512345
42.1
完成
工作

是,如果

可能clientguid50.8拥有的
1234512345dxcode

帖子选择 这样的:

    SELECT ClientGUID, DxCode
    FROM MyTable
    WHERE ClientGUID = 12345

任何想法或方向都将不胜感激!谢谢!

I am looking to take the values of a single column and transpose them into the corresponding row for each ClientGUID. A simple example of the of what I have post SELECT statement is:

ClientGUIDDxCode
1234550.8
1234562.5
1234542.1

What I am trying to accomplish is this, if possible:

ClientGUIDDxCode1DxCode2DxCode3
1234550.862.542.1

For this example my SELECT statement looks a such:

    SELECT ClientGUID, DxCode
    FROM MyTable
    WHERE ClientGUID = 12345

Any thoughts or direction would be greatly appreciated! Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我ぃ本無心為│何有愛 2025-01-26 14:20:03

You can use PIVOT for this, eg:

;WITH src AS
(
  SELECT ClientGUID, DxCode,
    rn = ROW_NUMBER() OVER (PARTITION BY ClientGUID ORDER BY @@SPID)
  FROM dbo.ClientDxCodes
  -- WHERE ClientGUID = 12345
)
SELECT ClientGUID, DxCode1 = [1], DxCode2  = [2], DxCode3 = [3],
    DxCode4 = [4], DxCode5 = [5], DxCode6  = [6], DxCode7 = [7],
    DxCode8 = [8], DxCode9 = [9], DxCode10 = [10]
FROM src
PIVOT 
(
  MAX(DxCode) 
  FOR rn IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10])
) AS p;

Output:

ClientGUIDDxCode1DxCode2DxCode3DxCode4DxCode5DxCode6DxCode7DxCode8DxCode9DxCode10
1234550.862.542.1nullnull< em> nullnullnull nullnull

You can use PIVOT for this, e.g.:

;WITH src AS
(
  SELECT ClientGUID, DxCode,
    rn = ROW_NUMBER() OVER (PARTITION BY ClientGUID ORDER BY @@SPID)
  FROM dbo.ClientDxCodes
  -- WHERE ClientGUID = 12345
)
SELECT ClientGUID, DxCode1 = [1], DxCode2  = [2], DxCode3 = [3],
    DxCode4 = [4], DxCode5 = [5], DxCode6  = [6], DxCode7 = [7],
    DxCode8 = [8], DxCode9 = [9], DxCode10 = [10]
FROM src
PIVOT 
(
  MAX(DxCode) 
  FOR rn IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10])
) AS p;

Output:

ClientGUIDDxCode1DxCode2DxCode3DxCode4DxCode5DxCode6DxCode7DxCode8DxCode9DxCode10
1234550.862.542.1nullnullnullnullnullnullnull
瞄了个咪的 2025-01-26 14:20:03

在此类查询中,值的数量可能会有所不同,使用 STRING_AGG() 列出所有值通常更简单、更灵活。
我们可以选择值之间使用的分隔符。一个有趣的选项是使用换行符并将值显示为垂直列表。

<前><代码>选择
客户端GUID,
STRING_AGG(DxCode, ', ') DxCodes
来自我的表
按客户 GUID 分组
按客户 GUID 订购;

客户端GUID | DX代码            
---------: | :------------------
     12345 | 50.80、62.50、42.10

db<>fiddle 此处

In this type of query the number of values may vary and it is generally simpler and more flexible to use STRING_AGG() to list all the values.
We can choose the seperator used between the values. One option which can be interesting is to use a newline and present the values as a vertical list.

SELECT
  ClientGUID,
  STRING_AGG(DxCode, ', ') DxCodes
FROM myTable
GROUP BY ClientGUID
ORDER BY ClientGUID;
ClientGUID | DxCodes            
---------: | :------------------
     12345 | 50.80, 62.50, 42.10

db<>fiddle here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文