我有一个带有[Items]
的SQL表及其关联的[Cost]
,我希望创建一个显示成本分布的直方图。这是我用于创建垃圾箱的(工作)查询:
SELECT
[$0-$25]=COUNT(CASE WHEN [Cost]>=0 AND [Cost]<25 THEN 1 END),
[$25-$50]=COUNT(CASE WHEN [Cost]>=25 AND [Cost]<50 THEN 1 END)
--etc.
FROM
table_name
表格中的不同项目的成本范围可能会有很大差异 - 换句话说,最高成本无法进行硬编码。从$0
开始并根据需要创建其他$25
列的最佳方法是什么?我认为该解决方案涉及同时使用MAX([Cost])
和PIVOT
,但我不确定如何处理它。
答案 0 :(得分:0)
如果您对行没问题,可以这样做:
def converter():
o_temp = float(raw_input('Enter a temperature (round to nearest integer): '))
for i in str(o_temp):
if i not in ['1','2','3','4','5','6','7','8','9','0','.']:
print 'Invalid entry. Please enter only the numerical temperature measurement in integer format.'
unit = raw_input('Convert to (F)ahrenheit or (C)elsius? ')
if unit in ['f','F']:
n_temp = (9.0/5.0) * float(o_temp) + 32
print '%f C = %f F' % (o_temp, n_temp)
elif unit in ['c','C']:
n_temp = (5.0/9.0) * (float(o_temp) - 32)
print '%f F = %f C' % (o_temp, n_temp)
else: #check for valid entry
print 'Invalid entry. Please enter F for Fahrenheit or C for Celsius'
unit_input()
def temp_converter():
#title, call sub-functions
print ''
print 'Temperature Converter'
print ''
converter()
print temp_converter()
如果要转置结果,则必须编写一些动态sql。类似于this。
答案 1 :(得分:0)
我建议你创建一个这样的存储过程:
CREATE PROCEDURE [dbo].[SP_Test]
@MaxValue decimal(5,2),
@StepValue decimal(2,2)
AS
BEGIN
DECLARE @SQL nvarchar(max) = '';
DECLARE @ItemsNo decimal(2,2) = @MaxValue / @StepValue;
;WITH CTE(s) AS (
SELECT 0
UNION ALL
SELECT s + 1
FROM CTE
WHERE s < @ItemsNo - 1)
SELECT @SQL = @SQL + CASE WHEN @SQL = '' THEN '' ELSE ',' END
+ '[$' + CAST((s * @StepValue) AS nvarchar(5))
+ '-$' + CAST(((s + 1) * @StepValue) AS nvarchar(5))
+ ']=COUNT(CASE WHEN [Cost]>=' + CAST((s * @StepValue) AS nvarchar(5))
+ ' AND [Cost]<' + CAST(((s + 1) * @StepValue) AS nvarchar(5))
+ ' THEN 1 END)'
FROM CTE
SET @SQL = 'SELECT ' + @SQL + ' FROM table_name'
EXEC(@SQL)
END
现在您可以像这样运行存储过程:
EXEC [dbo].[SP_Test]
@MaxValue = 100.0,
@StepValue = 25.0