【问题标题】:T-SQL partition by for string columnsT-SQL 对字符串列进行分区
【发布时间】:2014-03-28 17:25:16
【问题描述】:

我尝试通过对其他列进行分组来生成一个新列,并且下面的代码有效。

 CASE 
     WHEN familyGroupPOSRef = 955 
       THEN MAX(RVCPOSId) OVER (PARTITION BY organizationID, Location_Code, transactionID) 
       ELSE -1 
 END AS toEntity

有没有办法通过使用字符串列来运行此代码?在OVER 语句之前使用LocationName 而不是RVCPOSId

CASE 
    WHEN familyGroupPOSRef = 955 
      THEN LocationName OVER (PARTITION BY organizationID, Location_Code, transactionID) 
      ELSE 'nothing' 
END AS toEntity

到目前为止,我在网上找不到任何东西。它不必是这种方法。我需要将 organizationID, Location_Code, transactionID 分组并在单独的列中显示 955 的 locationName

现在的情况:

 organizationID   Code   transactionID   FGName         itemName
    10000         955    123456          Location       Liv Retail
    10000         103    123456          Internal Item  Chocolate Milkshake
    10000         103    123456          Internal Item  Strawberry Milk
    10000         103    123456          Internal Item  Milk

我想要的样子

organizationID   Code   transactionID   FGName         toEntity    itemName
10000            955    123456          Location       Liv Retail  Liv Retail
10000            103    123456          Internal Item  Liv Retail  Chocolate Milkshake
10000            103    123456          Internal Item  Liv Retail  Strawberry Milk
10000            103    123456          Internal Item  Liv Retail  Milk

一个事务可以有多个 menuItems,而且它总是有 1 个位置记录,就像一个 menuItem 一样保存。这是一个技巧。我喜欢创建一个新列来应用位置名称,即在提供的示例数据中的 toEntity 下的 Liv Retail。

如果我在追求不可能的事情,请告诉我。然后我会分解stmt并用join连接表。

提前致谢。

【问题讨论】:

    标签: sql-server string tsql partition


    【解决方案1】:

    您可以使用简单的子查询来做到这一点

    CREATE TABLE Table1
    ([organizationID] int, 
     [Code] int, 
     [transactionID] int, 
     [FGName] varchar(13), 
     [itemName] varchar(19));
    
     INSERT INTO Table1
    ([organizationID],
     [Code], 
     [transactionID], 
     [FGName], 
     [itemName])
     VALUES
    (10000, 955, 123456, 'Location', 'Liv Retail'),
    (10000, 103, 123456, 'Internal Item', 'Chocolate Milkshake'),
    (10000, 103, 123456, 'Internal Item', 'Strawberry Milk'),
    (10000, 103, 123456, 'Internal Item', 'Milk');
    
    select *,toEntity=(SELECT ITEMNAME FRom TAble1 Ti 
                where ti.TRANSACTIONID=T.TRANSACTIONID and Ti.FGNAME='Location' )
         from Table1 T  
    

    【讨论】:

    • 谢谢..我加入了表格,它看起来有点长查询。所以我尝试了你的方法更快。问候。
    猜你喜欢
    • 2022-01-18
    • 2019-03-19
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多