【发布时间】:2015-04-23 18:12:40
【问题描述】:
有以下数据
以下格式
CREATE TABLE [dbo].[Sample](
[CCMPNY] [varchar](2) NOT NULL,
[CCUST#] [numeric](7, 0) NOT NULL,
[RDDYSR] [varchar](7) NOT NULL,
[CBLNAM] [varchar](30) NOT NULL,
[CCYCLE] [varchar](2) NOT NULL,
[RDSIZE] [varchar](2) NOT NULL,
[RDCHGC] [varchar](2) NOT NULL,
[RDDAY] [numeric](1, 0) NOT NULL,
[RDROUT] [varchar](4) NOT NULL,
[RDQTY] [numeric](5, 0) NOT NULL
我怎样才能得到下面的布局
用红色标记的列
FREQ: "Count" of Days in "RDDYSR" field
LIFTS: "Lifts" = "RDQTY" times "Freq"
VOLUME: "Volume" = "RDQTY" times "RDSIZE" times "Freq"
Week Days columns:
MON: If "RDDYSR" includes "M", "RDQTY" times "RDSIZE", else "blank".
TUE: If "RDDYSR" includes "T", "RDQTY" times "RDSIZE", else "blank", etc.
注意事项
that each "CCUST" generates only one data line unless
(1) there are multiple "RDCHGC" values (CCUST 43),
(2) there are multiple "RDSIZE" values (CCUST 10723); or,
(3) there are multiple "FREQ" values (no example).
感谢您的帮助。
【问题讨论】:
-
你有没有尝试过?你搜索过什么吗?
RDSIZE的数字是多少,例如可以是“-0”、“IV”、“pi”吗?提示:使用适当的软件(MySQL、Oracle、DB2 等)和版本标记数据库问题很有帮助,例如sql-server-2014。语法和功能的差异通常会影响答案。 -
到目前为止我可以做的是从 RDDYSR 字段中删除破折号,这样很容易计算工作日。
-
这是一个开始。您可能希望使用
CASE表达式来帮助处理日期列,例如case when CharIndex( 'M', RDDYSR ) > 0 then RDQTY * Cast( RDSIZE as Int ) else NULL end。请注意,将任意数据类型混合在一起通常被认为是一种不好的做法,例如将大小存储在VARCHAR(2)中,或者使用单个返回数值计算结果 (RDQTY * RDSIZE) 作为字符串或单词blank。
标签: sql tsql sql-server-2008-r2