字符串列的T-SQL分区

时间:2014-02-26 04:45:54

标签: sql-server string tsql partition

我尝试通过对其他列进行分组来生成新列,并且下面的代码可以正常工作。

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

有没有办法通过使用字符串列来运行此代码?在LocationName陈述之前使用RVCPOSId代替OVER

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

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

现在如何:

 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连接表。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以使用简单的子查询

来完成此操作
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