title: PostgreSQL - DataError: invalid input syntax for type numeric: "Product"
body: <p>So I don't understand why it gives this error. is field value "Product" numeric?..
  I have query with UNION ALL, which makes first row to show total sum of other rows. My query is quite long, so I will not post it (but if it is necessary then I will post it).</p>
  
  <p>So first I will give snippet of my code:</p>
  
  <pre><code>with w as (
  SELECT
  ...
  CASE x.variants WHEN x.variants THEN x.product || ' - ' || x.variants else x.product END as product
  ...
  
  ) 
  
  SELECT 
  ...
  'Product' as product,
  ...
  UNION ALL
  SELECT * FROM w
  </code></pre>
  
  <p>So I'm using product column to show in first row as 'Product' (because I don't need to calculate in this field of first row. But calculate other fields total)</p>
  
  <p>When I run my query it outputs this error:</p>
  
  <pre><code>DataError: invalid input syntax for type numeric: "Product"
  LINE 104: 'Product' as product,
  </code></pre>
  
  <p>EDIT:
  PostgreSQL version 8.4</p>
  
  <p>Full query:</p>
  
  <pre><code>(
  with w as (SELECT
  min(fld2.id) AS id, -- note. Posted code is working now, but this select part was not
  fld2.partner as partner, -- the same that is at the bottom (where different first line
  fld2.product as product, -- is queried. So that gave error.
  fld2.qty1 as qty1,
  fld2.qty2 as qty2,
  fld2.q1 as q1,
  fld2.q2 as q2,
  CASE WHEN (q1 &gt;= q2 and q2 != 0) THEN ((q1-q2)/q2) * 100 WHEN (q1=0 or q2=0) THEN NULL WHEN (q2 &gt; q1 and q1!=0) THEN ((q1/q2)-1)*100 END as percent_q,
  fld2.price_q as price_q,
  fld2.y1  as y1,
  fld2.y2 as y2,
  CASE WHEN (y1 &gt;= y2 and y2 != 0) THEN ((y1-y2)/y2) * 100 WHEN (y1=0 or y2=0) THEN NULL WHEN (y2 &gt; y1 and y1!=0) THEN ((y1/y2)-1)*100 END as percent_y,
  fld2. price_y as price_y
  
  FROM
  (
  SELECT 
  min(x.id) AS id,
  x.partner as partner,
  --quarter as quarter,
  CASE x.variants WHEN x.variants THEN x.product || ' - ' || x.variants else x.product END as product,
  sum(case when (calcyear=DATE_PART('year',  now()) and x.quarter=3) then x.qty else 0 end) as qty1,
  sum(case when (calcyear=DATE_PART('year',  now() - '1 year'::interval) and x.quarter=3) then x.qty else 0 end) as qty2,
  sum(case when (calcyear=DATE_PART('year',  now()) and x.quarter=3) then price_unit else 0 end) as q1,
  sum(case when (calcyear=DATE_PART('year',  now() - '1 year'::interval) and x.quarter=3) then price_unit else 0 end) as q2,
  sum(case calcyear when  DATE_PART('year',  now()) then price_unit else 0 end) as y1,
  sum(case calcyear when DATE_PART('year',  now() - '1 year'::interval) then price_unit else 0 end) as y2,
  sum(case when (calcyear=DATE_PART('year',  now()) and x.quarter=3) then price_unit WHEN (calcyear=DATE_PART('year',  now() - '1 year'::interval)  and x.quarter=3) THEN -1*price_unit end) AS price_q,
  sum(case when calcyear=DATE_PART('year',  now()) then price_unit ELSE -1*price_unit end) AS price_y
  FROM (
    SELECT
      min(so.id) as id,
      DATE_PART('year',  so.date_order) AS calcyear,
      DATE_PART('quarter',  so.date_order) AS quarter,
     sol.price_unit as price_unit,
     rp.name as partner,
     pt.name as product,
     pp.variants as variants,
     sol.product_uom_qty as qty
  FROM 
  sale_order AS so 
  INNER JOIN sale_order_line AS sol ON (sol.order_id = so.id)
  INNER JOIN res_partner as rp ON (so.partner_id = rp.id)
  INNER JOIN product_product as pp ON (sol.product_id=pp.id)
  INNER JOIN product_template as pt ON (pp.product_tmpl_id=pt.id)
  WHERE EXISTS(
  SELECT * FROM  res_partner_category_rel rpcl
  WHERE 
  rpcl.partner_id=rp.id and rpcl.category_id=37
  and (so.date_order &gt;= date_trunc('year', now() - '1 year'::interval)::timestamp::date  and so.date_order &lt;= date_trunc('year', now()+ '1 year'::interval)::timestamp::date-1 )
  and rp.distributor=True and rp.active=True
  and so.state != 'cancel'
  )
  GROUP BY
  variants,
  calcyear,
  quarter,
  price_unit,
  partner,
  product,
  qty
  ) AS x
  GROUP BY
   partner,
  x.variants,
  x.product
  ORDER BY
    partner
  )fld2
  GROUP BY
  partner,
  q1,
  q2,
  y1,
  y2,
  qty1,
  qty2,
  product,
  price_q,
  price_y,
  percent_q,
  percent_y
  ORDER BY 
  partner
  )
  SELECT
  1111 as id,
  'Viso' as partner,
  'Product' as product,
  sum(uf.qty1) as qty1,
  sum(uf.qty2) as qty2,
  sum(uf.q1) as q1,
  sum(uf.q2) as q2,
  sum(CASE WHEN (uf.q1 &gt;= uf.q2 and uf.q2 != 0) THEN ((uf.q1-uf.q2)/uf.q2) * 100 WHEN (uf.q1=0 or uf.q2=0) THEN NULL WHEN (uf.q2 &gt; uf.q1 and uf.q1!=0) THEN ((uf.q1/uf.q2)-1)*100 END) as percent_q,
  sum(uf.price_q) as price_q,
  sum(uf.y1)  as y1,
  sum(uf.y2) as y2,
  sum(CASE WHEN (uf.y1 &gt;= uf.y2 and uf.y2 != 0) THEN ((uf.y1-uf.y2)/uf.y2) * 100 WHEN (uf.y1=0 or uf.y2=0) THEN NULL WHEN (uf.y2 &gt; uf.y1 and uf.y1!=0) THEN ((uf.y1/uf.y2)-1)*100 END) as percent_y,
  sum(uf.price_y) as price_y
  FROM 
  (
  SELECT 
  sum(price_q) as price_q,
  sum(price_y) as price_y,
  sum(qty1) as qty1,
  sum(qty2) as qty2,
  sum(q1) as q1,
  sum(q2) as q2,
  sum(y1)  as y1,
  sum(y2) as y2
  FROM w
  )uf
  UNION ALL
  SELECT * FROM w
  ) fld
  </code></pre>