Llenar espacios con cero

27/01/2009 - 22:26 por Alonso Vilela | Informe spam
Tengo un query que me da el siguiente resultado

id_toner id_sup Total
11 1 100
12 1 200
11 4 50
21 4 300
22 4 100
11 5 20
31 5 10

necesito ordernar esto de tal manera que pueda pasarlo a una tabla y se vea
asi...


cia 1 100 200 0 0 0
cia 4 50 0 300 100 0
cia 5 20 0 0 0 10

alguna sugerencia

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
28/01/2009 - 00:43 | Informe spam
Alonso Vilela,

Si esto es un reporte, preferible que hagas en pivot en la herramienta de
reportes que uses, como SQL Server Reporting Services.

Si usas SQL Server 2005 / 2008, chequea el operador PIVOT en los BOL.

Ejemplo:

DECLARE @t TABLE (
id_toner INT,
id_sup INT,
Total INT
)

INSERT INTO @t VALUES(11, 1, 100)
INSERT INTO @t VALUES(12, 1, 200)
INSERT INTO @t VALUES(11, 4, 50)
INSERT INTO @t VALUES(21, 4, 300)
INSERT INTO @t VALUES(22, 4, 100)
INSERT INTO @t VALUES(11, 5, 20)
INSERT INTO @t VALUES(31, 5, 10)

SELECT
'cia ' + LTRIM(id_sup) AS c1,
ISNULL([11], 0) AS c1,
ISNULL([12], 0) AS c2,
ISNULL([21], 0) AS c3,
ISNULL([22], 0) AS c4,
ISNULL([31], 0) AS c5
FROM
@t AS t
PIVOT
(
MIN(Total)
FOR id_toner IN ([11], [12], [21], [22], [31])
) AS pvt
ORDER BY
id_sup;
GO


AMB



"Alonso Vilela" wrote:

Tengo un query que me da el siguiente resultado

id_toner id_sup Total
11 1 100
12 1 200
11 4 50
21 4 300
22 4 100
11 5 20
31 5 10

necesito ordernar esto de tal manera que pueda pasarlo a una tabla y se vea
asi...


cia 1 100 200 0 0 0
cia 4 50 0 300 100 0
cia 5 20 0 0 0 10

alguna sugerencia




Respuesta Responder a este mensaje
#2 Alonso Vilela
28/01/2009 - 19:09 | Informe spam
Gracias por tu respuesta, pero la necesito como query por que el resultado
lo obtengo lo necesito en Coldfusion y tengo que llenar una tabla..

Pero esto es un resultado del query por que pueden haber mas id_toner como
mas id_sup ...


Mil gracias
"Alejandro Mesa" wrote in message
news:
Alonso Vilela,

Si esto es un reporte, preferible que hagas en pivot en la herramienta de
reportes que uses, como SQL Server Reporting Services.

Si usas SQL Server 2005 / 2008, chequea el operador PIVOT en los BOL.

Ejemplo:

DECLARE @t TABLE (
id_toner INT,
id_sup INT,
Total INT
)

INSERT INTO @t VALUES(11, 1, 100)
INSERT INTO @t VALUES(12, 1, 200)
INSERT INTO @t VALUES(11, 4, 50)
INSERT INTO @t VALUES(21, 4, 300)
INSERT INTO @t VALUES(22, 4, 100)
INSERT INTO @t VALUES(11, 5, 20)
INSERT INTO @t VALUES(31, 5, 10)

SELECT
'cia ' + LTRIM(id_sup) AS c1,
ISNULL([11], 0) AS c1,
ISNULL([12], 0) AS c2,
ISNULL([21], 0) AS c3,
ISNULL([22], 0) AS c4,
ISNULL([31], 0) AS c5
FROM
@t AS t
PIVOT
(
MIN(Total)
FOR id_toner IN ([11], [12], [21], [22], [31])
) AS pvt
ORDER BY
id_sup;
GO


AMB



"Alonso Vilela" wrote:

Tengo un query que me da el siguiente resultado

id_toner id_sup Total
11 1 100
12 1 200
11 4 50
21 4 300
22 4 100
11 5 20
31 5 10

necesito ordernar esto de tal manera que pueda pasarlo a una tabla y se
vea
asi...


cia 1 100 200 0 0 0
cia 4 50 0 300 100 0
cia 5 20 0 0 0 10

alguna sugerencia




Respuesta Responder a este mensaje
#3 Alejandro Mesa
29/01/2009 - 01:23 | Informe spam
Alonso Vilela,

Pero esto es un resultado del query por que pueden haber mas id_toner como
mas id_sup ...



Ahhhhhhhhhhhhhhhhhh!!!

Por que no lo mencionastes en tu primer post, para adivino ...?

SQL Server no cuenta con un operador PIVOT dinamico, asi que tendras que
hacer uso de SQL dinamico y el operador PIVOT. Debes tener cuidado al usat
sql dinamico, pues puede injectarse codigo t-sql mediante esta facilidad.


DECLARE @values NVARCHAR(MAX)
DECLARE @columns VARCHAR(MAX)
DECLARE @sql NVARCHAR(MAX)

CREATE TABLE #t (
id_toner INT,
id_sup INT,
total INT
)

INSERT INTO #t VALUES(11, 1, 100)
INSERT INTO #t VALUES(12, 1, 200)
INSERT INTO #t VALUES(11, 4, 50)
INSERT INTO #t VALUES(21, 4, 300)
INSERT INTO #t VALUES(22, 4, 100)
INSERT INTO #t VALUES(11, 5, 20)
INSERT INTO #t VALUES(31, 5, 10)

SET @values = STUFF(
(
SELECT CAST(',' AS VARCHAR(MAX)) + QUOTENAME(id_toner)
FROM (SELECT DISTINCT id_toner FROM #t) AS t
ORDER BY id_toner
FOR XML PATH('')
)
,1, 1, '')

SET @columns = STUFF(
(
SELECT CAST(',' AS VARCHAR(MAX)) + N'ISNULL(' + QUOTENAME(id_toner) + N', 0)
AS ' + QUOTENAME(id_toner)
FROM (SELECT DISTINCT id_toner FROM #t) AS t
ORDER BY id_toner
FOR XML PATH('')
)
,1, 1, '')

SET @sql = N'
SELECT
''cia '' + LTRIM(id_sup) AS c1,' + @columns + N'
FROM
#t AS t
PIVOT
(
MIN(total)
FOR id_toner IN (' + @values + N')
) AS pvt
ORDER BY
id_sup;'

EXEC sp_executesql @sql
GO

DROP TABLE #t
GO


The Curse and Blessings of Dynamic SQL
http://www.sommarskog.se/dynamic_sql.html


SQL Injection
http://msdn.microsoft.com/en-us/lib...61953.aspx


AMB



"Alonso Vilela" wrote:

Gracias por tu respuesta, pero la necesito como query por que el resultado
lo obtengo lo necesito en Coldfusion y tengo que llenar una tabla..

Pero esto es un resultado del query por que pueden haber mas id_toner como
mas id_sup ...


Mil gracias
"Alejandro Mesa" wrote in message
news:
> Alonso Vilela,
>
> Si esto es un reporte, preferible que hagas en pivot en la herramienta de
> reportes que uses, como SQL Server Reporting Services.
>
> Si usas SQL Server 2005 / 2008, chequea el operador PIVOT en los BOL.
>
> Ejemplo:
>
> DECLARE @t TABLE (
> id_toner INT,
> id_sup INT,
> Total INT
> )
>
> INSERT INTO @t VALUES(11, 1, 100)
> INSERT INTO @t VALUES(12, 1, 200)
> INSERT INTO @t VALUES(11, 4, 50)
> INSERT INTO @t VALUES(21, 4, 300)
> INSERT INTO @t VALUES(22, 4, 100)
> INSERT INTO @t VALUES(11, 5, 20)
> INSERT INTO @t VALUES(31, 5, 10)
>
> SELECT
> 'cia ' + LTRIM(id_sup) AS c1,
> ISNULL([11], 0) AS c1,
> ISNULL([12], 0) AS c2,
> ISNULL([21], 0) AS c3,
> ISNULL([22], 0) AS c4,
> ISNULL([31], 0) AS c5
> FROM
> @t AS t
> PIVOT
> (
> MIN(Total)
> FOR id_toner IN ([11], [12], [21], [22], [31])
> ) AS pvt
> ORDER BY
> id_sup;
> GO
>
>
> AMB
>
>
>
> "Alonso Vilela" wrote:
>
>> Tengo un query que me da el siguiente resultado
>>
>> id_toner id_sup Total
>> 11 1 100
>> 12 1 200
>> 11 4 50
>> 21 4 300
>> 22 4 100
>> 11 5 20
>> 31 5 10
>>
>> necesito ordernar esto de tal manera que pueda pasarlo a una tabla y se
>> vea
>> asi...
>>
>>
>> cia 1 100 200 0 0 0
>> cia 4 50 0 300 100 0
>> cia 5 20 0 0 0 10
>>
>> alguna sugerencia
>>
>>
>>
>>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida